Maven Java(TM)平台SE二进制文件在我终止进程后仍处于活动状态

Maven Java(TM)平台SE二进制文件在我终止进程后仍处于活动状态,maven,python-3.x,jvm,subprocess,kill,Maven,Python 3.x,Jvm,Subprocess,Kill,我曾经在python中使用子流程执行CMDs命令,我的部分代码如下 import subprocess proc = subprocess.Popen("mvn test", shell = True) try: proc.wait(60) # set timeout of proc except subprocess.TimeoutExpired: proc.kill() # kill the proc if it timed out print("subproc

我曾经在python中使用
子流程执行CMDs命令,我的部分代码如下

import subprocess

proc = subprocess.Popen("mvn test", shell = True)
try:
    proc.wait(60)  # set timeout of proc
except subprocess.TimeoutExpired:
    proc.kill()  # kill the proc if it timed out
    print("subprocess is killed")
它确实会在proc.kill()之后终止子进程,但是副作用来了,Java(TM)平台SE二进制文件仍然处于活动状态,占用了我的计算机的大量资源。那么我如何最终终止Java(TM)平台SE二进制文件呢?
我只是假设命令
mvn test
将调用JVM(类似于这样),当我终止进程
proc
时,Java(TM)平台SE二进制文件不会终止。

在尝试了其他一些功能后,如
子进程.run
子进程.call
等,都无法在WINDOWS上终止由proc生成的子进程。也许这些函数仍然只适用于LINUX

因此,我最终使用WINDOWS命令
taskkill
终止子进程(即proc),我的最终代码如下所示,在终止proc后,Java(TM)平台SE二进制文件被终止

proc = subprocess.Popen("mvn test", shell = True)
try:
    proc.wait(60)  # set timeout of proc
except subprocess.TimeoutExpired:
    # kill the proc if it timed out
    subprocess.call(["taskkill", "/F", "/T", "/PID", str(proc.pid)], shell = True)  
    print("subprocess is killed")

我刚刚担心进程
Java(TM)平台SE binary
将成为一个孤立的进程,占用太多的计算机资源:(谁能帮助MEMaybe这有帮助?@bert谢谢你的帮助,但是当我使用
os.killgp(os.getgpid(proc.pid),signal.SIGTERM)时
在WINDOWS平台上,它会抛出异常,模块操作系统没有“killgp”属性。
,也许我应该多搜索我的问题。@bert fffff最后,我必须杀死所有的子进程通过在WINDOWS命令taskkill上杀死
proc
生成的
proc
。哦,一切都很好。谢谢大家ame:)从2.19版开始,maven surefire插件(“maven测试”)中已修复了此问题或类似问题。请参阅。嗨,@evgenisergev,谢谢你的建议,也许最新的sure fire插件修复了这个bug。此外,我以前也曾将此错误归咎于python语言,但如果我们能够通过修复插件来解决此问题,事情就会变得简单。