当父进程被杀死时,使用 fork() 创建的子进程是不是会自动被杀死?

Posted

技术标签:

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

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

谢谢。


已有的类似问题:

How can I cause a child process to exit when the parent does? How to make child process die after parent exits?

【问题讨论】:

我记得看到过类似的问题。例如。 ***.com/questions/269494/… 【参考方案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/….

以上是关于当父进程被杀死时,使用 fork() 创建的子进程是不是会自动被杀死?的主要内容,如果未能解决你的问题,请参考以下文章

当父进程死亡时,如何杀死使用 subprocess.check_output() 创建的 python 子进程?

如何在父进程被杀死/完成时保持子进程处于活动状态(在 Windows 中)

ForkManager SIGINT 只杀死 fork 中的当前进程

当节点进程被杀死时杀死所有child_process

perl fork() exec() ,子进程变得狂野

Linux多进程编程实例