在Windows服务器上,我使用新的控制台窗口从主脚本启动子过程,并将其添加到过程列表中,以便关闭它们:

p = Popen(["python", 'secondscript.py', arg1, arg2, arg3], creationflags=CREATE_NEW_CONSOLE)
Proc.append(p)


以后如果我用以下方法杀死proc:

for p in Proc:
    p.kill()


它们似乎确实停止运行,但控制台窗口仍然保持打开状态。本身并没有什么大不了的,但是随着时间的流逝,它们会加起来并开始引起问题。

使用新的控制台标志可以使工作更加轻松,但是是否有一种更整洁的方法来确保控制台窗口正确关闭?我也许可以依靠OS lib中的一个taskkill,但这似乎并不是一个好方法。

我环顾四周,看起来有些人在Linux服务器上遇到问题,不得不发送sigkill,但我认为这无论如何都是kill()要做的。

我可能只需要使用kill()使其停止工作,然后使用任务包进行整理即可,但是如果有更巧妙的方法,我将不胜感激。

最佳答案

我在Windows上遇到了同样的问题,并且在SO的某个位置(不幸的是前一段时间)找到了以下命令:

proc_class = subprocess.Popen(r"C:blabla\server.bat", creationflags=CREATE_NEW_CONSOLE)

... do some stuff ...

Popen("TASKKILL /F /PID {} /T".format(proc_class.pid))


而且效果很好

07-27 18:30