2010-11-03 30 views
32

Voici ma pensée:Tuer un processus créé avec subprocess.Popen() Python

Tout d'abord, je créé un processus en utilisant subprocess.Popen

En second lieu, après un certain laps de temps, j'ai essayé de le tuer par Popen.kill()

import subprocess 
import os, signal 
import time 

proc1 = subprocess.Popen("kvm -hda /path/xp.img", shell = True) 
time.sleep(2.0) 
print 'proc1 = ', proc1.pid 
subprocess.Popen.kill(proc1) 

Cependant, "PROC1" existe encore après Popen.kill(). Des experts peuvent-ils me dire comment résoudre ce problème? J'apprécie vos considérations. Grâce aux commentaires de tous les experts, j'ai fait tout ce que vous avez recommandé, mais le résultat reste le même.

proc1.kill() #it sill cannot kill the proc1

os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1 

Merci tout de même.

Et j'attends toujours votre expérience précieuse pour résoudre ce problème délicat.

+0

Pourquoi avez-vous besoin de "shell = True"? Sans cela, il semble fonctionner exactement comme vous l'attendriez. –

+4

Au lieu de mettre [Résolu] dans le titre, veuillez choisir la bonne réponse en cliquant sur le symbole du chèque. – bluish

+1

bonne réponse est ici: http://stackoverflow.com/questions/4789837/how-to-terminate-a-python-subprocess-launched-with-shell-true –

Répondre

19

Dans votre code, il devrait être

proc1.kill() 

tuer ou mettre fin à une méthode d'objet Popen qui envoie un signal signal.SIGKILL au processus.

+14

Merci d'abord. Cependant, j'ai essayé celui-ci, il ne fonctionne toujours pas ... – user495511

+2

cela ne fonctionne pas –

7

Utilisez uniquement une méthode kill Popen

 process = subprocess.Popen(task.getExecutable(), stdout=subprocess.PIPE,  stderr=subprocess.PIPE, shell=True) 
     process.kill() 
+2

Cela fonctionne jusqu'à ce que j'ajoute "time.sleep (x)" devant "process.kill()" .. – user495511

+2

Cela ne fonctionne pas –

9

process.terminate() ne fonctionne pas lorsque vous utilisez shell=True. Ce answer vous aidera.

+0

merci beaucoup, votre réponse a mis fin à mes 3 heures de débogage – tahayk