它是僵尸吗?

时间:2013-09-19 10:31:10

标签: c unix operating-system system-calls zombie-process

我对以下代码有疑问。

#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;
}

子进程是否会终止?它会留在僵尸状态吗?

3 个答案:

答案 0 :(得分:3)

在您的示例中,子进程已终止但父进程不知道它的exit状态。因此,孩子(现在 zombie )留在流程表中。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

添加到其他回复..如果相反的情况发生,即父进程在子进程完成之前死亡,那么该子进程将成为孤儿,并且稍后将被特殊系统“采用”进程名为 init