在python中,我有一个父进程,它生成了一些子进程。我遇到了一种情况,由于未处理的异常,父进程正在死亡,而子进程处于孤立状态。如何让孩子进程认识到他们失去了父母?
我尝试了一些代码,将子进程挂钩到每个可用信号,但没有一个被触发。从理论上讲,我可以在父进程周围进行一次巨大的尝试,以确保它至少会给孩子们带来一个sigterm,但这样做不够优雅而且不是万无一失的。如何防止孤立进程?
答案 0 :(得分:8)
(包括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()
从其套接字读取事件并在那时接收文件结尾。