繁体   English   中英

分支过程:子进程终止时恢复父进程(Linux)

[英]Fork process: Resume parent process while children terminated (Linux)

我已经编写了一个C ++应用程序,它可以等待事件发生(例如,等待传入连接)。 该事件发生后,它将通过分叉处理该事件的子进程来继续。

因此,我的代码基本上如下所示:

int main(void) {
  while(1) {
    Event e = waitUntilSomethingHappens(); // blocks execution until event occurs
    pid_t pid = fork(); 
    if (pid == 0) {
      doChildStuff(e); 
      exit(0); 
      return 0; 
    }
  }
  return 0;
}

我现在的期望是子进程将终止(因为exit(0)和/或return )。 确实,它留下了while循环,但似乎并未终止。 当我点击ps -e ,将显示两个进程,而子进程则标记为<defunct>

为什么它不消失? 我该怎么做才能使其消失?

您必须使用wait调用之一来获取有关孩子状态更改的通知。

从手册中:

一个终止但尚未等待的孩子成为“僵尸”。 内核维护有关僵尸进程的最少信息集(PID,终止状态,资源使用信息),以便允许父级稍后执行等待以获得有关子级信息的等待。 只要没有通过等待将僵尸从系统中删除,僵尸就会消耗内核进程表中的一个插槽,如果该表填满,将无法创建更多进程。 如果父进程终止,则init(8)将采用其“僵尸”子级(如果有的话),它将自动执行等待以删除僵尸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM