【发布时间】:2017-07-04 15:23:19
【问题描述】:
我在 Python 中调用一个 shell 脚本,它产生多个子进程。如果两分钟后没有完成,我想终止该进程及其所有子进程。
有什么办法可以用 subprocess.run 做到这一点,还是必须重新使用 Popen?由于运行被阻塞,我无法将 pid 保存在某个地方以在额外的命令中杀死孩子。一个简短的代码示例:
try:
subprocess.run(["my_shell_script"], stderr=subprocess.STDOUT, timeout=120)
except subprocess.TimeoutExpired:
print("Timeout during execution")
【问题讨论】:
-
是的,
popen是首选。请注意,杀死孩子的孩子是不可能的(取决于my_shell_script)。它们可以分离。 -
就我而言,我绝对希望它们被杀死,因为它们会产生非常高的负载。我可能会恢复使用 Popen 并为我的进程获取一个 pid 以终止进程组。
标签: python python-3.x subprocess