【问题标题】:python terminate/kill subprocess grouppython终止/杀死子进程组
【发布时间】:2012-09-19 12:12:38
【问题描述】:

我有一些 python 脚本通过 subprocess.Popen() 级联打开自己。

(我调用 script1.py 生成 script2.py 的 popen 生成 script3.py 的 popen 等)

有没有办法从 script1.py PID 终止/杀死 script1.py 的所有子进程。

os.killpg() 不起作用。

感谢您的帮助。

【问题讨论】:

  • 您是否尝试过使用 script2Proc = subprocess.Popen("python script2.py") 并杀死它, script2Proc.kill()

标签: python subprocess popen kill kill-process


【解决方案1】:

通过在script2.py执行开始时改变gid,后续进程属于script2 gid。所以用 script2 的 pid 从 script1.py 调用 killpg() 就可以了。

【讨论】:

  • 你能解释一下怎么做吗?谢谢
  • subprocess.Popen 有一个非常有用的参数 preexec_fn,我很高兴地发现了它。通过 script2PID=subprocess.Popen(["script2.py"], shell=False, pre exec_fn=os.setpgrp) 和 os.setpgrp,这将使我的第二个脚本成为所有后续进程的领导者,即更改他的 GID随后的分叉将继承。这样我就可以通过 os.killpg(script2PID) 杀死 script2 进程组
【解决方案2】:

在 script1.py 中,杀死打开到 script2.py 的子进程。

Popen.terminate()

或 Popen.kill()

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多