如何在按顺序关闭子进程的同时终止子进程

时间:2017-07-31 18:05:03

标签: python python-3.x subprocess

我有一个运行多个测试文件的GUI。 所有测试都是python文件,GUI使用从线程运行的子进程逐个运行。

在GUI中,用户可以停止运行测试的计算机。 我已经找到了如何为此目的杀死子进程及其工作原理。 见Killing sub process that run inside a thread

现在,我有另一个问题。 测试打开了许多我必须以有序的方式关闭的实例。 当我使用 kill()方法时,所有实例都没有关闭,我无法运行进一步的测试。  I.E在用户停止之前我在测试中使用的COM端口仍然被占用并阻止我再运行测试。

唯一的解决方法是关闭GUI并重新开始。

简而言之,我需要一种方法来随时杀死一个子进程,但仍然关闭所有实例,如 sys.exit(),或者关闭GUI所具有的效果。 我尝试使用等待(超时),但除非我错误地使用它,否则它无法解决问题。

我可以在测试中使用一种中断来调用某个方法,这会以有序的方式关闭它吗?

1 个答案:

答案 0 :(得分:0)

您应该能够使用类似this solution的内容来识别和终止应用程序启动的子进程以运行测试。此解决方案似乎特别适合您杀死所有后台进程的用例,以便您的应用程序能够运行更多测试。

或者,您可以为测试创建一个try-except包装器或装饰器,允许它们在应用程序发送某个信号时被杀死,但这需要应用程序跟踪所有启动子进程,如果测试在后台启动其他子进程,则可能无法正确终止所有进程。