一個進程終止但是父進程尚未進行回收,就是僵死。
避免僵死可以調用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);
}
}