Linux如何避免进程僵死


一个进程终止但是父进程尚未进行回收,就是僵死。

  避免僵死可以调用waitpid等待子进程结束,但是其间父进程一直阻塞。

  更好的办法是调用两次fork函数。

  源代码如下:

  #include<sys/types.h>

  #include<unistd.h>

  #include<sys/wait.h>

  int main()

  {

  pid_t pid;

  if((pid = fork()) < 0)//出错

  {

  perror("fork!\n");

  }

  else if(pid == 0)//子进程1

  {//子进程中创建进程2

  if((pid =fork()) < 0)//出错

  {

  perror("fork!\n");

  }

  else if(pid > 0)//进程1

  {

  exit(0);//退出

  }

  else//子进程2

  {

  sleep(2);

  printf("second child, parent pid = %d\n", getpid());

  exit(0);

  }

  }

  else//父进程

  {

  sleep(3);

  printf("parent!\n");

  exit(0);

  }

  }


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3