如何抑制"杀死"在python脚本中调用os.killpg()时的输出?

时间:2017-05-02 11:17:04

标签: python linux

我有一个调用多个进程的python脚本,这些进程可以调用更多进程。 为了杀死所有这些,我使用了以下脚本:

os.setpgrp()
# Code which invokes multiple processes
# 
# Almost all work got completed but some processes are still running which I don't need any more.
os.killpg(0, signal.SIGKILL)

运行上面的python脚本时,我最终会得到带有print Killed的输出。

如果我将信号signal.SIGKILL更改为signal.SIGTERM,则输出从Killed更改为Terminated。我想压制这些信息,以免它使用户感到困惑,因为它与他无关。有没有办法从stdout压制这个?

编辑1:正如@SiHa所指出的,有一个相关的问题:Python - How to hide output after killed specified process

但是我的问题与os.killpgrp()杀死我自己的python脚本的意义上有点不同,因此回答这个问题并没有帮助我转移输出。 当我尝试上述相关问题的建议答案时,我发现trash.txt已创建,但仍然在标准输出中打印Killed。文件trash.txt仍为空。 可能的原因在我看来我的python脚本被杀死所以没有进一步的代码被执行。

1 个答案:

答案 0 :(得分:0)

正如我在我的问题中所提到的,以下声明正在杀死我自己的python脚本:

os.killpg(0, signal.SIGKILL)

要解决我的问题,我必须创建一个包含所有孩子的进程组并使用以下方法终止它们:

os.killpg(<pgid_of_children>, signal.SIGTERM)

感谢@ceving解释SIGTERM对SIGKILL的好处。