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