我曾经使用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
答案 0 :(得分:1)
在尝试了subprocess.run
,subprocess.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")