1

我对以下代码有一些疑问。

#include <stdio.h>
#include <sys/types.h>

int main(void)
{
    int pid=fork();
    if(pid==0) sleep(5);
    printf("Hello World %d %d\n",getpid(),pid);
    if(pid>0) while(1){sleep(1);}
    if(pid==0) printf("In child process!\n");
    return 0;
}

子进程会终止吗?它会保持僵尸状态吗?

4

3 回答 3

3

在您的示例中,子进程死亡,但父进程不知道它的exit状态。因此,孩子(现在是僵尸)留在进程表中。

此外,父母继续等待孩子并继续奔跑。

于 2013-09-19T10:56:28.030 回答
1

是的,它是僵尸......您的子进程死亡,您的父进程不知道子进程的退出状态。即使孩子死了,父进程仍在运行。

ZOMBIE 进程:当子进程死亡时,父进程仍在运行。在这种情况下,父进程不知道子进程的退出状态。
为了避免这个父进程使用waitwaitpid知道child status.

于 2013-09-19T11:07:11.083 回答
1

添加到其他响应.. 如果相反的情况发生,即父进程在子进程完成之前死亡,那么子进程将成为孤儿,稍后将被称为init的特殊系统进程“收养” 。

于 2013-09-21T05:52:11.740 回答