我是 UNIX 编程的新手,我正在阅读僵尸进程以及如何使用 fork() 两次来避免它们。我从一本书中阅读了代码并尝试在我的系统上运行它。我使用的是 ubuntu 12.04。我运行了以下代码:
#include<stdio.h>
#include<sys/wait.h>
#include<stdlib.h>
int main()
{
pid_t pid;
if(pid = fork() < 0)
printf("Fork Error.!!!\n");
else
if(pid == 0)
{
if((pid = fork()) < 0)
printf("Fork2 Error.!!!\n");
else
if(pid > 0)
exit(0);
sleep(2);
printf("Second Child, parent id: %d\n", getppid());
exit(0);
}
if(waitpid(pid, NULL, 0) != pid)
printf("Waitpid Error.!!!\n");
exit(0);
}
我得到的输出如下:
Second Child, parent id: 1
Second Child, parent id: 1
这本书说这应该只打印一次,当我看到代码中发生的事情时,这也是我觉得应该发生的事情。我不明白为什么它会被打印两次。我在网上的很多地方都找到了这段代码,但找不到能解释这一点的东西。欢迎任何帮助。谢谢。!!