如何在子进程中检测父进程是否已终止?
在Python中,我有一个父进程,它会创建几个子进程。最近我遇到了一个问题,由于父进程出现了未处理的异常,导致它崩溃了,而子进程则变成了孤儿进程。请问我该如何让子进程知道它们失去了父进程呢?
我尝试了一些代码,把子进程连接到所有可用的信号上,但没有一个信号被触发。理论上,我可以在父进程周围加一个大的try/except块,确保它至少能给子进程发送一个终止信号,但这样做既不优雅也不可靠。我该如何防止孤儿进程的出现呢?
2 个回答
10
在UNIX系统(包括Linux)上:
def is_parent_running():
try:
os.kill(os.getppid(), 0)
return True
except OSError:
return False
需要注意的是,在UNIX系统中,信号0并不是真正的信号。它只是用来检查某个进程是否存在。可以查看kill命令的手册了解更多信息。
5
你可以使用 socketpair()
来创建一对 Unix 域套接字,这个操作最好在创建子进程之前进行。父进程打开一端,子进程打开另一端。当父进程退出时,它那一端的套接字会关闭。这样,子进程就能知道父进程已经退出,因为它可以通过 select()
或 poll()
来监听自己套接字的读事件,并在那时收到文件结束的信号。