非阻塞等待子进程退出

时间:2014-03-28 19:48:38

标签: c wait fork

我在C中有一个程序用fork()启动100个子进程,然后在循环中等待它们使用等待。我想等待最多的时间让他们全部完成,所以父进程不会被阻止,如果其中一个是,如果那个时间结束,就杀掉未完成的进程。

哪种方法最好?

2 个答案:

答案 0 :(得分:0)

设置所需时间的闹钟。如果警报响起,则杀死原来尚未死亡的儿童名单中的任何一个,然后将它们发送到适当的位置,然后“离开”。信号。

我建议先发送SIGTERM或SIGHUP;然后收集尸体。如果在另一个短暂延迟后仍有剩余,则发送SIGKILL信号。如果你过于戏剧化(SIGKILL)太快,程序就没有机会清理他们所做的任何混乱。

答案 1 :(得分:0)

子进程需要以某种方式表示它们已完成主进程(您可以让它们将消息传递回主进程,让它们创建一个文件说明它们已完成,或者其他任何方式是对你来说最简单)。一旦该机制到位,让主进程检查进程已完成的信号,如果已收到所有进程,则继续,否则等待一段时间再进行检查。在此循环中添加一个检查以查看是否已达到最大超时,如果是,则继续。