6

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

我尝试了一些将子进程与每个可用信号挂钩的代码,但没有一个被触发。从理论上讲,我可以在父进程周围放置一个巨大的 try/except 以确保它至少向子进程触发一个 sigterm,但这是不雅的,也不是万无一失的。如何防止孤立进程?

4

2 回答 2

8

在 UNIX(包括 Linux)上:

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

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

于 2011-04-18T16:28:46.640 回答
5

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

于 2011-04-18T16:25:19.847 回答