我正在使用以下命令启动一个子进程:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
但是,当我尝试使用以下方法杀死时:
p.terminate()
或者
p.kill()
该命令一直在后台运行,所以我想知道如何才能真正终止该进程。
请注意,当我使用以下命令运行命令时:
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
发出 p.terminate()
时,它确实成功终止。
原文由 user175259 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 进程组 以便能够向组中的所有进程发送信号。为此,您应该将会话 ID 附加到衍生/子进程的父进程,在您的情况下这是一个外壳。这将使其成为流程的组长。所以现在,当一个信号被发送到进程组组长时,它会被传输到这个组的所有子进程。
这是代码: