【问题标题】:Will killing Python script that called shell processes also kill the shell processes?杀死调用shell进程的Python脚本也会杀死shell进程吗?
【发布时间】:2016-07-08 10:08:12
【问题描述】:

如果我在文件 this_script.py 中有这样的代码:

import subprocess
subprocess.Popen(["python", "another_script.py"])

我打电话给

python this_script.py

并在进程运行时杀死它,它会杀死子进程吗?

编辑:我对此进行了测试,如果 this_script 被杀死,子进程将继续运行。有没有办法确保后台进程在 Python 主进程死亡时死亡?

【问题讨论】:

  • 何不试试呢?
  • 不同平台上的答案可能会有所不同,所以正如@TymoteuszPaul 建议的那样,您应该自己尝试一下,以确定它在您的平台上的作用。
  • 我测试了它,当主进程被杀死时继续运行(这是在 CentOS 上)。有没有办法确保主进程死时子进程也死?

标签: python subprocess multiprocessing python-multiprocessing kill-process


【解决方案1】:

是的,您可以捕获 KeyboardInterruptSystemExit 并确保 kill 子进程。

from subprocess import Popen

try:
    p = Popen(args)
    p.wait()  # wait for the process to finish
except KeyboardInterrupt,  SystemExit:
    p.kill()
    raise

【讨论】:

  • 这段代码的问题是Popen()异步运行。换句话说,主 Python 进程几乎会立即退出,而您现在可以在后台运行子进程。要修复它,您可以添加p.wait()。在try 块中,或将except .. 更改为finally ...不确定OP 想要哪个...
猜你喜欢
  • 2017-01-23
  • 2012-09-08
  • 2013-03-26
  • 1970-01-01
  • 2012-09-30
  • 2013-11-11
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
相关资源
最近更新 更多