代码之家  ›  专栏  ›  技术社区  ›  ishan3243

它是僵尸吗?

  •  1
  • ishan3243  · 技术社区  · 11 年前

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

    #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 回复  |  直到 11 年前
        1
  •  3
  •   devnull    11 年前

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

    此外,父母继续 等待 为了孩子,一直跑。

        2
  •  1
  •   Gangadhar    11 年前

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

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

        3
  •  1
  •   user2801317 user2801317    11 年前

    正在添加到其他响应。。如果发生相反的情况,即父进程在子进程完成之前死亡,则子进程将成为 孤儿 随后将被一个称为 初始化 .