死时如何设置守护进程以杀死其进程组中的其他进程

时间:2019-04-02 22:01:45

标签: python linux macos daemon

我想创建一个Manager守护程序,该守护程序生成两个子进程AB。当Manager守护程序死/被杀死时,它应该杀死AB。目前,已经设置好了,因此如果我将"stop"传递给Manager,它将向其进程组发送一个SIGTERM,这将杀死所有内容。

但是,如果我直接向SIGTERM发送Manager,它也会杀死AB。我已经尝试过信号处理程序,但这会创建一个循环,在该循环中它将SIGTERM发送到PG,然后将其发送回Manager,等等。

我还尝试通过在生成Manageros.setpgid(os.getpid(), os.getpid())之前调用A来使B成为流程组组长,但这似乎并没有杀死{{1} }和A

在下面的示例中,运行B将创建python manager.py startManagerA。然后:

  1. B将杀死所有3个进程
  2. python manager.py stop将杀死所有3个人
  3. kill -INT -$MANAGER_PGID只会杀死kill $MANAGER_PID而不是ManagerA
B

1 个答案:

答案 0 :(得分:0)

由于我创建并使用PID文件来查找要停止的进程,因此我通过检查PID文件是否仍然存在来停止了循环。