如何在父进程死亡时检测子进程?

时间:2011-04-18 16:02:53

标签: python subprocess orphan

在python中,我有一个父进程,它生成了一些子进程。我遇到了一种情况,由于未处理的异常,父进程正在死亡,而子进程处于孤立状态。如何让孩子进程认识到他们失去了父母?

我尝试了一些代码,将子进程挂钩到每个可用信号,但没有一个被触发。从理论上讲,我可以在父进程周围进行一次巨大的尝试,以确保它至少会给孩子们带来一个sigterm,但这样做不够优雅而且不是万无一失的。如何防止孤立进程?

2 个答案:

答案 0 :(得分:8)

UNIX上的

(包括Linux):

def is_parent_running():
    try:
        os.kill(os.getppid(), 0)
        return True
    except OSError:
        return False

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

答案 1 :(得分:5)

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