父母退出后如何使子进程死亡?

新手上路,请多包涵

假设我有一个进程恰好产生一个子进程。现在,当父进程因任何原因(正常或异常,通过 kill、^C、断言失败或其他任何原因)退出时,我希望子进程终止。如何正确地做到这一点?


关于stackoverflow的一些类似问题:


关于 Windows 的 stackoverflow 的一些类似问题:

原文由 Paweł Hajdan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 838
2 个回答

孩子可以通过在 prctl() 系统调用中指定选项 PR_SET_PDEATHSIG 来要求内核传递 SIGHUP (或其他信号),如下所示:

prctl(PR_SET_PDEATHSIG, SIGHUP);

详见 man 2 prctl

编辑:这是仅限 Linux

原文由 qrdl 发布,翻译遵循 CC BY-SA 2.5 许可协议

我正在尝试解决同样的问题,并且由于我的程序必须在 OS X 上运行,因此仅限 Linux 的解决方案对我不起作用。

我得出了与此页面上其他人相同的结论——当父母去世时,没有一种与 POSIX 兼容的方式来通知孩子。所以我拼凑了下一个最好的事情——让孩子投票。

当父进程死亡(出于任何原因)时,子进程的父进程变为进程 1。如果子进程只是定期轮询,它可以检查其父进程是否为 1。如果是,子进程应该退出。

这不是很好,但它很有效,而且比本页其他地方建议的 TCP 套接字/锁定文件轮询解决方案更容易。

原文由 Schof 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题