Python 当父进程死亡时,如何在子进程中检测?

Python 当父进程死亡时,如何在子进程中检测?,python,subprocess,orphan,Python,Subprocess,Orphan,在python中,我有一个父进程,它生成了一些子进程。我遇到了这样一种情况:由于一个未处理的异常,父进程正在消亡,而子进程则处于孤立状态。如何让子进程认识到它们已经失去了父进程 我尝试了一些将子进程与每个可用信号挂钩的代码,但没有一个被触发。理论上,我可以在父母的过程中进行一次巨大的尝试/例外,以确保它至少能向孩子们发出一个信号,但这是不雅观的,也不是万无一失的。如何防止孤立进程?在创建子进程之前,可以使用socketpair()创建一对unix域套接字。让父对象的一端打开,让子对象的另一端打开

在python中,我有一个父进程,它生成了一些子进程。我遇到了这样一种情况:由于一个未处理的异常,父进程正在消亡,而子进程则处于孤立状态。如何让子进程认识到它们已经失去了父进程


我尝试了一些将子进程与每个可用信号挂钩的代码,但没有一个被触发。理论上,我可以在父母的过程中进行一次巨大的尝试/例外,以确保它至少能向孩子们发出一个信号,但这是不雅观的,也不是万无一失的。如何防止孤立进程?

在创建子进程之前,可以使用
socketpair()
创建一对unix域套接字。让父对象的一端打开,让子对象的另一端打开。当父进程退出时,它的套接字端将关闭。然后,孩子将知道它已退出,因为它可以
select()
/
poll()
从其套接字读取事件,并在此时接收文件结尾。

在UNIX(包括Linux)上:


注意,在UNIX上,信号0不是实信号。它只是用来测试给定的进程是否存在。请参阅kill命令手册。

“理论上,我可以在父进程周围放置一个巨大的try/except,以确保它至少向子进程触发一个sigterm。”这基本上就是我在某个项目中所做的。我希望你能找到更好的解决方案。。。看起来是同一个问题,好主意。你可能也可以用管道做同样的事情,这和我现在用流程之间的管道做的差不多。由于代码的结构,它并没有我想要的那么干净,但是从我目前所能说的来看,它是我将要得到的最好的。
def is_parent_running():
    try:
        os.kill(os.getppid(), 0)
        return True
    except OSError:
        return False