我想创建一个Manager
守护程序,该守护程序生成两个子进程A
和B
。当Manager
守护程序死/被杀死时,它应该杀死A
和B
。目前,已经设置好了,因此如果我将"stop"
传递给Manager
,它将向其进程组发送一个SIGTERM
,这将杀死所有内容。
但是,如果我直接向SIGTERM
发送Manager
,它也会杀死A
和B
。我已经尝试过信号处理程序,但这会创建一个循环,在该循环中它将SIGTERM
发送到PG,然后将其发送回Manager
,等等。
我还尝试通过在生成Manager
和os.setpgid(os.getpid(), os.getpid())
之前调用A
来使B
成为流程组组长,但这似乎并没有杀死{{1} }和A
。
在下面的示例中,运行B
将创建python manager.py start
,Manager
和A
。然后:
B
将杀死所有3个进程python manager.py stop
将杀死所有3个人kill -INT -$MANAGER_PGID
只会杀死kill $MANAGER_PID
而不是Manager
或A
B
答案 0 :(得分:0)
由于我创建并使用PID文件来查找要停止的进程,因此我通过检查PID文件是否仍然存在来停止了循环。