【问题标题】:what's the relationship between exit(0) and zombie processexit(0) 和僵尸进程有什么关系
【发布时间】:2019-07-15 12:30:16
【问题描述】:

我发现当我从子部分中删除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);
}

【问题讨论】:

    标签: c linux zombie-process


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 2013-04-11
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 2010-11-12
      相关资源
      最近更新 更多