exit(0)和僵尸进程之间有什么关系

时间:2019-07-15 12:30:16

标签: c linux zombie-process

我发现,当我从子部件中删除exit(0);时,它无法创建僵尸进程。你能告诉我为什么吗?

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

int main() {
      if(!fork()) {
        printf("child pid=%d\n", getpid());
        exit(0);
      }

      sleep(20);
      printf("parent pid=%d \n",getpid());
      exit(0);
}

1 个答案:

答案 0 :(得分:4)

僵尸进程是一个死子进程,而父进程尚未选中。在原始代码中,孩子比父母早20秒结束,所以僵尸要20秒。如果您删除第一个exit(0),它们都将存活20秒,因为在子级中,除非有什么阻止,否则控制权将从if块的底部直接传出。

因此,如果您删除了孩子的exit(),那么不仅不大可能在一段可观察的时间内使僵尸变成僵尸,而且您应该看到它除了显示“孩子pid”外还会显示“父母pid”消息“消息。