[英]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.