进程A通过fork()
创建了进程B。
进程A死亡,因此init
收养了进程B。
一个看门狗创建了进程C。
是否有可能让C从init
中接管B?
更新:
如果在A死亡之前创建了C,是否可能让C直接接管B(而不是通过init
成为中间父进程)?
更新-1:
另外,我希望对为什么按照我描述的方式采用进程是一件坏事或难以实现提供任何意见。
更新-2: - 使用案例(父进程和子进程指代进程):
我有一个应用程序,使用父进程来管理大量的子进程,这些子进程依赖于父进程的管理设施。为了完成其工作,父进程依赖于收到相关的SIGCHLD
信号以通知子进程的终止。
如果父进程本身由于某种意外原因(包括段错误)而死亡,则需要重新启动整个“家族”,因为现在无法在子进程的终止上触发任何操作(这也可能是由于段错误)。
在这种情况下,我需要关闭所有子进程并重新启动整个系统。
避免此类情况的一种可能方法是放置一个备用进程,该进程可以接管已死亡的父进程的角色... - 如果它可以再次接收到后代SIGCHLD
信号!