我在Python中调用一个shell脚本fom,它产生了多个子进程。如果两分钟后未完成,我想终止该过程及其所有子项。在subprocess.TimeoutExpired后抛出Python子进程的子节点抛出
有没有什么办法可以做到与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')。他们可以分离。 – freakish
在我的情况下,我绝对希望他们遇难,因为他们产生很高的负载。我可能会回复使用Popen并为我的进程获得一个pid以杀死进程组。 – Raptor