如果父在Python中被杀死,则杀死子进程

Sau*_*rma 17 python multiprocessing

我正在从python脚本中生成5个不同的进程,如下所示:

p = multiprocessing.Process(target=some_method,args=(arg,))
p.start()
Run Code Online (Sandbox Code Playgroud)

我的问题是,当某个父进程(主脚本)被杀死时,子进程继续运行.

当父母被杀时,有没有办法杀死这样产生的子进程?

编辑:我正在尝试这个:

p = multiprocessing.Process(target=client.start,args=(self.query_interval,))
p.start()
atexit.register(p.terminate)
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有奏效

fly*_*lee 18

我自己遇到了同样的问题,我有以下解决方案:

在打电话之前p.start(),你可以设定p.daemon=True.然后就像这里提到的python.org多处理

当进程退出时,它会尝试终止其所有守护进程子进程.

  • 我想提一下,如果使用 SIGKILL (kill -9) 杀死父进程,那么守护进程不会停止。 (10认同)

Bas*_*nen 5

孩子不会收到父母死亡的通知,它只会以另一种方式工作。

但是,当一个进程终止时,它的所有文件描述符都将关闭。如果管道的另一端选择了要读取的管道,则会通知管道的另一端。

所以你的父母可以在产生进程之前创建一个管道(或者实际上,你可以将 stdin 设置为管道),孩子可以选择它进行阅读。当父端关闭时,它将报告准备好阅读。这需要您的孩子运行主循环,或者至少定期调用选择。如果你不想那样做,你需要一些管理器进程来做,但是当那个进程被杀死时,事情又会崩溃。