在Windows服务器上,我使用新的控制台窗口从主脚本启动子过程,并将其添加到过程列表中,以便我可以关闭它们:
p = Popen(["python", 'secondscript.py', arg1, arg2, arg3], creationflags=CREATE_NEW_CONSOLE)
Proc.append(p)
稍后如果我用以下方法杀死过程:
for p in Proc:
p.kill()
他们确实似乎停止了运行,但我确实离开了控制台窗口仍然打开。本身并不是一件大事,但随着时间的推移会增加并开始引发问题。
使用新的控制台标志可以轻松实现生活,但是有一种更简洁的方法可以确保控制台窗口正常关闭吗?我可以依赖OS lib中的taskkill,但这似乎不是一种很好的方法。
我环顾四周看起来有些人在Linux服务器上遇到问题并且不得不发送一个sigkill,但我认为这就是kill()应该做的事情。
我可能只需要使用kill()来阻止它工作,然后使用taskkil来整理,但如果有更简洁的方法,我会感激任何建议。
答案 0 :(得分:1)
我有同样的问题(在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))
并且效果很好
答案 1 :(得分:0)
也许我显然误读了.terminate()和.kill()的工作方式不同。终止()似乎正确地解决了这个问题。