###########大家来讨论一下僵死进程的问题###########
最近在一本书上看到一个通过2次fork来避免僵死进程的例子:
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
main()
{
pid_t pid;
pid=fork();
if(pid<0)
printf("fork error\n");
else if(pid==0){
pid=fork();
if(pid<0){
printf("fork error\n");
}
else if(pid>0){
printf("first child\n");
exit(0);
}
sleep(2);
printf("second child,parent id is %d\n",getppid());
exit(0);
}
if(waitpid(pid,NULL,0)!=pid)
printf("waitpid error\n");
printf("parent\n");
exit(0);
}
看后有如下疑问:只调用一次fork,且父进程不调用waitpid,在父进程退出后子进程的父进程变为init进程,子进程也不会成为僵死进程,为什么要调用2次?另外在子进程中直接调用setpgrp()函数也可以使其父进程变为init进程,为何一定要2次fork?还有那为兄弟对进程组比较情况,能否介绍一下?