如何在随时关闭子进程的同时杀死子进程

问题描述:

我有一个运行多个测试文件的GUI。 所有测试都是使用从线程运行的子进程逐个运行GUI的python文件。如何在随时关闭子进程的同时杀死子进程

在GUI中,用户有能力停止运行测试的机器。 我已经找到了如何为此目的及其作品杀死一个子过程。 参见Killing sub process that run inside a thread

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

唯一的补救办法是关闭GUI并重新开始。

总之,我需要一种方法来随时杀死一个子进程,但仍然关闭所有的实例,如sys.exit()会做或关闭他的GUI有同样的效果。 我尝试使用等待(超时)但除非我错误地使用它,它并没有办法。

我可以在测试中使用某种中断,在测试中会调用某些方法,它会按顺序关闭它?

您应该可以使用类似this solution的东西来识别和终止应用程序启动的运行测试的子进程。这个解决方案似乎特别适合你的使用情况,即杀死所有后台进程,以便让你的应用程序运行更多的测试。

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