Java (TM) platform SE binary è ancora attivo dopo aver ucciso il processo


Ho usato per eseguire il comando CMDs all'interno di python usando subprocess, e il mio codice parziale è il seguente.

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")

Ucciderà il sottoprocesso dopo proc.uccidi(), ma l'effetto collaterale arriva, Java (TM) Platform SE binary è ancora attivo e prende molte risorse del mio computer.So come posso finalmente uccidere Java(TM) Platform SE binary ?
Ho solo supposto che il comando mvn test chiamerà la JVM (qualcosa del genere), quando uccido il processo proc, il La piattaforma Java(TM) SE binary non viene uccisa. Immagine di Windows Resource Manager

Author: Yongfeng, 2016-12-12

1 answers

Dopo aver provato alcune altre funzioni come subprocess.run, subprocess.call e così via, tutti non riescono a uccidere il processo figlio generato da proc su WINDOWS. Forse queste funzioni funzionano ancora solo per LINUX.

Così finalmente uso il comando di WINDOWS taskkill per uccidere il sottoprocesso (cioè, proc ), i miei codici finali sono i seguenti e Java (TM) Platform SE binary viene ucciso dopo aver ucciso 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")
 1
Author: Yongfeng, 2016-12-14 07:26:05