的Java(TM)平台SE二进制仍然是活动的余杀死进程

问题描述:

我用于内部使用subprocess蟒执行的CMD命令后,和我的部分编码如下。的Java(TM)平台SE二进制仍然是活动的余杀死进程

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(类似的东西),当我杀死进程procJava(TM)Platform SE二进制文件不会被杀死。 Picture of Windows Resource Manager

+0

我刚刚说过程Java™Platform SE二进制文件将成为孤立的进程并占用太多的计算机资源:(**谁可以帮我** – Yongfeng

+0

也许这有帮助吗?http:// *.com/questions/4789837/how-to-terminate-a-python-subprocess-launched-with-shell-true – bert

+0

@bert感谢您的帮助,但是当我用'os.killgp(os.getgpid(proc.pid),signal.SIGTERM)'在WINDOWS plarform,它会抛出异常'模块,操作系统没有“killgp”的属性',也许我应该更多地寻找我的问题。 – Yongfeng

尝试过诸如subprocess.runsubprocess.call等等,这一切都是无法终止由PROC在WINDOWS生成的子过程中的一些其他功能后。也许这些功能仍然只适用于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")