如何避免出现僵尸进程

时间:2024-09-27 23:42:17 Linux认证 我要投稿
  • 相关推荐

如何避免出现僵尸进程

  所谓僵尸进程,就是指子进程结束后,其实并没有真正被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构,它几乎放弃了所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载进程的退出状态等供其他进程搜集,此时即使用root身份kill -9也不能将其杀死,此时唯一的补救办法就是找到它的父进程,并将其杀死,此时僵尸进程过继给init,由init负责回收。那么怎样用两次fork来避免僵尸进程呢

  #include

  #include

  #include

  #include

  #include

  int main()

  {

  pid_t pid;

  pid=fork();

  if(pid<0)

  {

  perror("child1 create failed\n");

  exit(-1);

  }

  else if(pid==0)

  {

  /*child1*/

  pid=fork();

  if(pid<0)

  {

  perror("child2 create failed\n");

  exit(-1);

  }

  else if(pid>0)

  {

  /*child1结束*/

  exit(0);

  }

  /*child2*/

  sleep(2);//因为不知道child1和child2哪个先执行,所以让child2先睡两秒

  /*TODO child2*/

  exit(0);

  }

  /*parent*/

  if(waitpid(pid,NULL,0)!=pid) //wait for child1

  {

  perror("waitpid error\n");

  exit(-1);

  }

  /*TODO parent*/

  exit(0);

  }

  总的说来,其实就是父进程parent创建一个子进程child1,child1再创建它的子进程child2,此时结束child1,child2就自然过继给init啦,这样以后无论怎样,当child2结束时直接就由init释放,再也影响不到parent进程了,也不可能会出现僵尸进程啦

【如何避免出现僵尸进程】相关文章:

如何避免数控机床出现的安全问题?10-25

避免中考常出现的15个“意外”06-07

如何避免蜘蛛陷阱06-14

如何避免瑜伽伤害10-21

避免谈话出现僵局的3个技巧06-04

如何避免酒后驾车-避免酒后驾车的方法08-22

如何避免商品漏发08-09

如何打高球避免高尔夫10-26

如何避免汽车后视镜盲区07-13

如何避免孩子的起床气?07-05