我对以下代码有疑问。
#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;
}
子进程是否会终止?它会留在僵尸状态吗?
答案 0 :(得分:3)
在您的示例中,子进程已终止但父进程不知道它的exit
状态。因此,孩子(现在 zombie )留在流程表中。
此外,父母继续为孩子等待并继续跑步。
答案 1 :(得分:1)
是的,它是僵尸......你的Child进程死了,你的父进程不知道子进程的退出状态。即使在孩子死后,父进程仍在运行。
ZOMBIE进程:子进程死时父进程仍在运行。在这种情况下,父进程不知道子进程的退出状态
为避免此父流程使用wait
或waitpid
来了解child status
。
答案 2 :(得分:1)
添加到其他回复..如果相反的情况发生,即父进程在子进程完成之前死亡,那么该子进程将成为孤儿,并且稍后将被特殊系统“采用”进程名为 init 。