Fork进程:在子进程终止时恢复父进程(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)采用子项(如果有的话),它会自动执行等待移除僵尸。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- 用C++将哈希表写入文件并从文件中恢复
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- Opencv 恢复到比我设置的更高的分辨率
- 从不同进程中的另一个线程挂起/恢复线程或进程
- ZMQ::send() 抛出异常并终止 QNX 进程.为什么以及如何从中恢复?
- C++ - 读取进程内存到缓冲区,写入进程内存(同一缓冲区上的新值)将缓冲区恢复为旧值
- 如何在 Linux 上恢复所有当前进程
- Fork进程:在子进程终止时恢复父进程(Linux)
- 通知父进程恢复工作
- 暂停并恢复 Qt 中由 QProcess 启动的子进程
- 如何在c++中挂起和恢复进程和线程