【问题标题】:Are child processes created with fork() automatically killed when the parent is killed?当父进程被杀死时,使用 fork() 创建的子进程是否会自动被杀死?
【发布时间】:2010-09-28 14:16:21
【问题描述】:

我正在使用 C/C++ 中的 fork() 创建子进程。
当父进程结束(或由于某种原因被杀死)时,我希望所有子进程也被杀死。
是系统自动完成的吗?还是我必须自己做?

谢谢。


已有的类似问题:

【问题讨论】:

标签: c++ linux process fork parent-child


【解决方案1】:

没有。如果父进程被杀死,子进程将成为 init 进程的子进程(进程 ID 为 1,并作为内核的第一个用户进程启动)。

init 进程定期检查新的子进程,并等待它们(从而释放由它们的返回值分配的资源)。

这里已经讨论了这个问题并提供了高质量的答案: How to make child process die after parent exits?

【讨论】:

  • 那么这是否意味着子进程在提前终止之前没有被异常杀死,而是等待它们完全执行自己的代码然后终止?
  • @NagabhushanBaddi 是的。从 Linux 3.4 开始,您可以使用 prctl 的“PR_SET_CHILD_SUBREAPER”使任何进程在这方面成为“init”进程。然后,该进程将获取死进程的子进程。但是如果你在一个容器中(例如 docker),你必须小心包含一个正确的“init”进程。像“bash”这样的虚拟进程也可以:blog.phusion.nl/2015/01/20/….
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2010-12-08
  • 2013-09-19
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多