【问题标题】:Non blocking wait for child processes to exit非阻塞等待子进程退出
【发布时间】:2014-03-28 19:48:38
【问题描述】:

我有一个 C 语言程序,它使用 fork() 启动 100 个子进程,然后使用循环中的等待等待它们完成。我想等待最长时间让它们全部完成,因此如果其中一个被阻塞,父进程不会保持阻塞状态,如果该时间结束,则杀死未完成的进程。

最好的方法是什么?

【问题讨论】:

    标签: c wait fork


    【解决方案1】:

    设置所需时间的闹钟。如果警报响起,请杀死您最初的孩子名单中尚未死亡的孩子,并向他们发送适当的“走开”信号。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-05
        • 2010-11-12
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        相关资源
        最近更新 更多