僵死进程: 父进程没有等待子进程,wait() 子进程会变成僵死进程。

int main(int arg, char *args[])
{
 
  pid_t pid = fork();//调用fork产生一个子进行
  int status;
  if (pid == -1)
  {
  printf("fork failed\n");
  return 0;
  }
  if (pid == 0)//子进程调用execve,执行ls -l命令
  {
          exit(0);//子进程退出了,变成了僵死进程。

  }
  else
  {

printf("father exit");

//wait(&status);//阻塞调用,直到子进程退出,wait才返回

sleep(10);//没有等待子进程状态。

     return 0;//父进程退出
  }
}

孤儿进程: 父进程退出子进程还没有退出,会由init进程接管变成孤儿进程。

int main(int arg, char *args[])
{
  close(STDOUT_FILENO);//关闭标准输出
  open("/dev/pts/2", O_WRONLY);//打开"/dev/pts/2",做为标准输出
  pid_t pid = fork();//调用fork产生一个子进行
  int status;
  if (pid == -1)
  {
  printf("fork failed\n");
  return 0;
  }
  if (pid == 0)//子进程调用execve,执行ls -l命令
  {
  char *args[] = { "/bin/ls", "-l", NULL };
  execve("/bin/ls", args, NULL);

  }
  else
  {

  return 0;//父进程退出
  }
}

//父进程等待子进程退出的代码
int main(int arg, char *args[])
{
  pid_t pid = fork();//调用fork之后会有两个进程
  int status;
  if (pid == 0)
  {
    printf("child begin\n");
    sleep(5);
    printf("child end\n");
    return -1;
  }

  if (pid > 0)
  {
    printf("parent begin\n");
    wait(&status);//阻塞调用,直到子进程退出,wait才返回
    printf("child return = %d\n", WEXITSTATUS(status));
    printf("parent end\n");
  }

  return 0;
}

//僵死进程
//父进程没有调用wait,子进程就退出了,这个时候子进程就成了僵死进程

进程退出的5种方式:

return 跟exit 在主函数main中效果是一样的,只是在子函数中,才有区别,子函数中return只是退出子函数,exit才是退出进程。

exit  在main函数中跟return是一样的,只是在子函数中不相同。

_exit

abort  异常退出。生成一个core.xxx文件  (ulimit -c unlimited)

信号  kill(pid , SIGKILL);

fork();的更多相关文章

  1. [置顶] Linux高编之进程--------fork函数的同步与异步(兄弟子进程和父子孙进程示列)

    前面讲述的fork函数的基本用法,下面通过两个程序来说明fork函数同步与异步之间的关系: <1>通过fork函数实现在父进程下的四个兄弟子进程(即异步) : 函数实现代码: #inclu ...

  2. 关于操作系统中多个fork()会创建几个进程的理解

    最近在看操作系统的书,在讲到用fork()创建子进程时,有些地方一时迷惑,最终理解,特记录下来.如下: //创建一个子进程:#include "csapp.h" int main( ...

  3. Github fork其他项目的分支与主干保持同步

    Fork一个Repo Fork是一个复制的操作,当你Fork一个项目之后,你就有了在原项目的基础之上进行修改和扩展的权限. 通常情况下,Fork操作用于参与别人的项目(成为项目中的一员),或者以别人的 ...

  4. 多进程 multiprocessing 模块进程并发Process;Pool ;Queue队列 、threading模块;

    multiprocessing 模块中的 Process类提供了跨平台的多进程功能,在windows和linux系统都可以使用. 1.首先要实例化一个类,传入要执行的函数. 实例名 = Process ...

  5. Redis时延问题分析及应对

    Redis时延问题分析及应对 Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞: 当redis的数据量达到一定级别后(比如 ...

  6. Linux内核分析总结

    张潇月 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习目录: (1)计算机是如何工作的   h ...

  7. 分析Linux内核创建一个新进程的过程

    一.原理分析 1.进程的描述 进程控制块PCB——task_struct,为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct ...

  8. 《Linux内核分析》第六周 进程的描述与创建

    [刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK SIX(3 ...

  9. Linux内核分析——第八周学习笔记20135308

    第八周 进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 1.进程调度与进程调度的时机分析 (1)进程分类 第一种分类 I/O-bound:等待I/O CPU-bound: ...

随机推荐

  1. svn无法更新解决方案

    1.删除C:\Documents and Settings\用户名\Application Data\Subversion\auth下的文件,删除svn登录信息. 2.将eclipse中 window ...

  2. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  3. git 秘钥的生成

    在命令查看自己的秘钥还是公钥 cat .ssh/id_rsa.pub/cat .ssh/id_rsa

  4. 【28】避免返回handles指向对象内部成分

    1.为什么? 很简单,你指向箱子里面的一个物品,使用这个物品.但是箱子不受你控制,箱子销毁了,里面的物品也会随之销毁.那么这种情况下,你指向的就是一堆垃圾,你还在使用这个物品,导致未定义的行为.

  5. IOS--- NavigationBar标题按钮

    A.NavigationBar标题按钮 1.需求 在“首页”的导航栏中部设置一个“首页”文字+箭头按钮 统一设置样式 根据实际文本长度调整宽度 消除系统自带的点击高亮效果 点击按钮,箭头上下颠倒 gi ...

  6. Sqlserver到处数据到Excel

    转:http://www.cnblogs.com/litianfei/archive/2007/08/10/850823.html ) drop procedure [dbo].[p_exporttb ...

  7. orczhou----MYSQL

    https://yq.aliyun.com/users/1597777588650149?spm=5176.blog11192.yqblogcon1.2.5mdGQb

  8. 安卓开发中使用Genymotion模拟器

    在安卓开发中,运行和调试自己所写的安卓程序需要用到模拟器 在一般情况下 是直接在这创建一个模拟器,但是这种自带的模拟器运行效率不佳,而且启动时间漫长 所以,我们可以换一款安卓模拟器 Genymotio ...

  9. iOS多线程开发--NSThread NSOperation GCD

    多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势 ...

  10. centos 下安装ati显卡驱动方法

    1)到ati的官网(http://support.amd.com/us/gpudownload/Pages/index.aspx)下载相应的驱动,一定要注意 radeon系列和mobility rad ...