如果父进程在Python中被终止,则终止子进程

2024-04-25 13:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

p = multiprocessing.Process(target=some_method,args=(arg,))
p.start()

我的问题是,当父进程(主脚本)以某种方式被终止时,子进程继续运行。

当父进程被杀死时,有没有办法杀死子进程,它们是这样生成的?

编辑: 我在尝试:

p = multiprocessing.Process(target=client.start,args=(self.query_interval,))
p.start()
atexit.register(p.terminate)

但这似乎行不通


Tags: self脚本client编辑target进程方式arg
2条回答

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

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

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

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

在调用p.start()之前,可以设置p.daemon=True。那么正如这里提到的python.org multiprocessing

When a process exits, it attempts to terminate all of its daemonic child processes.

相关问题 更多 >