2016-12-12 56 views
0

我用於內部使用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:// stackoverflow.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

回答

0

嘗試過諸如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")