我在C中有一个程序用fork()
启动100个子进程,然后在循环中等待它们使用等待。我想等待最多的时间让他们全部完成,所以父进程不会被阻止,如果其中一个是,如果那个时间结束,就杀掉未完成的进程。
哪种方法最好?
答案 0 :(得分:0)
设置所需时间的闹钟。如果警报响起,则杀死原来尚未死亡的儿童名单中的任何一个,然后将它们发送到适当的位置,然后“离开”。信号。
我建议先发送SIGTERM或SIGHUP;然后收集尸体。如果在另一个短暂延迟后仍有剩余,则发送SIGKILL信号。如果你过于戏剧化(SIGKILL)太快,程序就没有机会清理他们所做的任何混乱。
答案 1 :(得分:0)
子进程需要以某种方式表示它们已完成主进程(您可以让它们将消息传递回主进程,让它们创建一个文件说明它们已完成,或者其他任何方式是对你来说最简单)。一旦该机制到位,让主进程检查进程已完成的信号,如果已收到所有进程,则继续,否则等待一段时间再进行检查。在此循环中添加一个检查以查看是否已达到最大超时,如果是,则继续。