杀死进程后,Java(TM)平台SE二进制文件仍处于活动状态

时间:2016-12-12 12:11:02

标签: maven python-3.x jvm subprocess kill

我曾经使用subprocess在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)Platform SE二进制文件仍处于活动状态并占用了我计算机的大量资源。那么我怎样才能最终杀死 Java(TM)Platform SE二进制文件? 我只是假设命令mvn test将调用JVM(类似的东西),当我终止进程{​​{1}}时, Java(TM)Platform SE二进制文件不是'被杀了。 Picture of Windows Resource Manager

1 个答案:

答案 0 :(得分:1)

在尝试了subprocess.runsubprocess.call等其他一些功能后,所有功能都无法杀死WINDOWS上 proc 生成的子进程。也许这些功能仍然只适用于LINUX。

所以我最终使用WINDOWS命令taskkill来杀死子进程(即 proc ),我的最终代码如下, Java(TM)Platform SE binary < / strong>在我杀死 proc

后被杀死
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")