【发布时间】:2012-05-18 04:33:22
【问题描述】:
进程 A fork()s 进程 B。
进程 A 死亡,因此 init 采用 B。
看门狗创建进程 C。
C 有没有可能从init 采用 B?
更新:
或者如果 C 是在 A 死之前创建的,而 init 没有成为 B 的中间父级,甚至可以让 C 直接采用 B(当 A 死时)?
更新 1:
另外,如果有任何 cmets 解释为什么有可能采用我所描述的方式将是一件坏事或难以实施,我将不胜感激。
Update-2 - 用例(父子进程指代进程):
我有一个应用程序使用父母来管理一大群孩子,这些孩子依赖于父母的管理设施。为了完成其工作,父母依赖于收到孩子终止的通知,这是通过接收相关的SIGCHLD 信号来完成的。
如果父母本身因某种事故(包括段错误)而死亡,我需要重新启动整个“家庭”,因为现在不可能在孩子终止时触发某些事情(这也可能是由于段错误)。
在这种情况下,我需要关闭所有孩子并重新启动整个系统。
避免这种情况的一种可能方法是建立一个备用进程,它可以接管死去的父母的角色...... - 如果它可以再次接收到继子的SIGCHLD 信号!
【问题讨论】:
-
如果孩子们继承了父母制作的管道的“读取”端,他们可能会让自己失望。 'read' 端将在父母去世时选择可读(对于 EOF),这是每个孩子可以捕获并做出反应的 IO 事件。
-
这个问题是,我不想让孩子们失望。我希望有可能通过继父进程替换死去的父母(就能够接收他们的 SIGCHLD 而言,以防他们终止)。 @pilcrow
-
在我上面的评论中,这个“...收到他们的 SIGCHLD ...”应该是“...收到他们孩子的 SIGCHLD ...”。
标签: c unix parent children process-reaper