的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(类似的东西),当我杀死进程proc
,Java(TM)Platform SE二进制文件不会被杀死。 Picture of Windows Resource Manager
答
尝试过诸如subprocess.run
,subprocess.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")
我刚刚说过程Java™Platform SE二进制文件将成为孤立的进程并占用太多的计算机资源:(**谁可以帮我** – Yongfeng
也许这有帮助吗?http:// *.com/questions/4789837/how-to-terminate-a-python-subprocess-launched-with-shell-true – bert
@bert感谢您的帮助,但是当我用'os.killgp(os.getgpid(proc.pid),signal.SIGTERM)'在WINDOWS plarform,它会抛出异常'模块,操作系统没有“killgp”的属性',也许我应该更多地寻找我的问题。 – Yongfeng