C - exit(0) 和僵尸进程之间的关系是什么



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

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
int main() {
      if(!fork()) {
        printf("child pid=%dn", getpid());
        exit(0);
      }
      sleep(20);
      printf("parent pid=%dn",getpid());
      exit(0);
}

僵尸进程是父进程尚未检查的死子进程。在原始代码中,子项比父项早 20 秒结束,因此它是 20 秒的僵尸。如果你去掉第一个exit(0),它们都保持活力 20 秒,因为在孩子中,控制权会从if块的底部传递出去,除非有什么东西阻止它。

因此,如果您删除孩子的exit()那么它不仅不太可能在可观察到的时间内变成僵尸,而且您应该看到它除了"子 pid"消息之外还打印了"父 pid"消息。

最新更新