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

57

我记得看到过类似的问题。例如:https://dev59.com/EnVC5IYBdhLWcg3whBej - PolyThinker
1个回答

63

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

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

这个问题已经在这里讨论过了:如何使子进程在父进程退出后终止?


那是否意味着在过早终止之前,子进程不会被异常终止,而是等待它们完全执行其代码,然后终止? - Nagabhushan Baddi
1
@NagabhushanBaddi 是的。自从Linux 3.4版本以来,您可以使用prctl的“PR_SET_CHILD_SUBREAPER”将任何进程作为“init”进程处理。该进程随后接管死亡进程的子进程。但是,如果您在容器中(例如docker),则必须小心地包含适当的“init”进程。像“bash”这样的虚拟进程也可以:https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/。 - Johannes Schaub - litb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接