在 python 中,我有一个父进程,它产生了一些子进程。我遇到了一种情况,由于未处理的异常,父进程正在死亡,而子进程处于孤立状态。如何让子进程认识到他们失去了父进程?
我尝试了一些将子进程与每个可用信号挂钩的代码,但没有一个被触发。从理论上讲,我可以在父进程周围放置一个巨大的 try/except 以确保它至少向子进程触发一个 sigterm,但这是不雅的,也不是万无一失的。如何防止孤立进程?
在 python 中,我有一个父进程,它产生了一些子进程。我遇到了一种情况,由于未处理的异常,父进程正在死亡,而子进程处于孤立状态。如何让子进程认识到他们失去了父进程?
我尝试了一些将子进程与每个可用信号挂钩的代码,但没有一个被触发。从理论上讲,我可以在父进程周围放置一个巨大的 try/except 以确保它至少向子进程触发一个 sigterm,但这是不雅的,也不是万无一失的。如何防止孤立进程?
在 UNIX(包括 Linux)上:
def is_parent_running():
try:
os.kill(os.getppid(), 0)
return True
except OSError:
return False
请注意,在 UNIX 上,信号 0 不是真实信号。它仅用于测试给定进程是否存在。有关 kill 命令,请参阅手册。
您可以socketpair()
在创建子进程之前创建一对 unix 域套接字。让父母打开一端,让孩子打开另一端。当父级退出时,它的套接字将关闭。然后孩子会知道它退出了,因为它可以select()
/poll()
用于从其套接字读取事件并在那时接收文件结尾。