Java (TM) platform SE binary est toujours actif après avoir tué le processus


J'avais l'habitude d'exécuter la commande CMDs dans python en utilisant subprocess, et mon code partiel est le suivant.

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

Cela va tuer le sous-processus après proc.tuer(), mais l'effet secondaire s'agit, Java(TM) Platform SE binary, est toujours actif et prendre beaucoup de ressources de mon ordinateur.Alors, comment puis-je finalement tuer le Java(TM) Platform SE binary?
Je viens de supposer que la commande {[2] } appellera la JVM (quelque chose comme ça), quand je tue le processus proc, le Java(TM) Platform SE binary n'est pas tué. Image du Gestionnaire de ressources Windows

Author: Yongfeng, 2016-12-12

1 answers

Après avoir essayé d'autres fonctions telles que subprocess.run, subprocess.call et ainsi de suite, tous ne parviennent pas à tuer le processus enfant généré par proc sous WINDOWS. Peut-être que ces fonctions ne fonctionnent toujours que pour LINUX.

Donc j'utilise finalement la commande WINDOWS taskkill pour tuer le sous-processus (c'est-à-dire, proc), mes codes finaux sont les suivants et le Java(TM) Platform SE binary est tué après avoir tué 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