我有一个调用多个进程的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脚本被杀死所以没有进一步的代码被执行。
答案 0 :(得分:0)
正如我在我的问题中所提到的,以下声明正在杀死我自己的python脚本:
os.killpg(0, signal.SIGKILL)
要解决我的问题,我必须创建一个包含所有孩子的进程组并使用以下方法终止它们:
os.killpg(<pgid_of_children>, signal.SIGTERM)
感谢@ceving解释SIGTERM对SIGKILL的好处。