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

dav*_*off 6 python subprocess orphan

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

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

Mic*_*jer 8

在UNIX(包括Linux)上:

def is_parent_running():
    try:
        os.kill(os.getppid(), 0)
        return True
    except OSError:
        return False
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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