如何在Linux操作系统中检测父进程死亡?
如果在名为fork()父进程中,则创建子进程。在父进程中,我可以使用系统调用wait()来等待终止的子进程,并获取其状态。
但是,我找不到关于子进程如何检测父进程死亡的信息?
发布于 2012-08-30 17:18:08
您可以通过调用getppid(),然后通过kill()发送信号0来获取父进程id。如果返回代码为0,则表示该进程仍在运行。
正如@Ariel提到的,getppid()将返回原始父进程的pid或初始化的pid,它将是pid 1。因此,您必须通过在启动时调用getppid()来存储父pid,或者稍后检查您的父进程是否具有pid 1。
根据Linux上的this answer,你还可以通过prctl()的PR_SET_PDEATHSIG选项和一个自己选择的信号来检测父母的死亡。
发布于 2019-06-27 04:44:14
如果父进程和子进程在其生命周期内都处于您的控制之下,则最可移植的方法是与父进程共享管道或套接字的一半。
在派生之前,打开socketpair().
中的
对于父进程中的
这种方法的优点是它完全避免了UNIX中最难掌握的机制之一的信号,并提供了一个等待的描述符,可以很容易地与网络多路复用器或GUI事件循环集成。
发布于 2016-12-06 21:33:45
在我的Ubuntu16.04.1LTSgetppid()返回的不是"1“,而是进程的id "/sbin/upstart --user”,所以检查getppid() == 1将不起作用,getppid()应该在子进程启动时保存并在以后进行比较。
https://stackoverflow.com/questions/12193581
复制相似问题