如何在Linux OS中检测父进程死亡?
如果在名为fork()
的父进程中,则创建子进程。在父进程中,我可以使用系统调用wait()
来等待已终止的子进程,并获取其状态。
但是,我找不到有关子进程如何检测父进程死亡的信息?
答案 0 :(得分:11)
您可以通过调用getppid()
然后通过kill()
发送信号0来获取父进程ID。返回码0表示进程仍处于活动状态。
如@Ariel所述,getppid()
将返回原始父级的pid或者init的pid,这将是pid 1.因此,您必须通过调用getppid()
来存储父级pid在启动时或稍后检查您的父母是否有pid 1。
根据Linux上的this answer,您还可以通过prctl()
的{{1}}选项和自选信号检测父亲的死亡。
答案 1 :(得分:3)
在我的Ubuntu 16.04.1中,LTS getppid()在父命令后不返回“1”但是进程“/ sbin / upstart --user”的id,所以检查getppid()== 1将不起作用并且getppid()应该在孩子开始时保存并稍后进行比较。
答案 2 :(得分:0)
如果父进程和子进程在生命周期中都受到您的控制,则最可移植的方法是与父进程共享一半的管道或套接字。
此方法的优点是它完全避免了信号(这是UNIX中最难掌握的机制之一),并提供了可以轻松地与网络多路复用器或GUI事件循环集成的可等待描述符。