web-dev-qa-db-fra.com

Tuer un processus créé avec le sous-processus de Python.Popen ()

Voici ma pensée:

Tout d'abord, j'ai créé un processus en utilisant un sous-processus.

Deuxièmement, après un certain 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 toujours après Popen.kill (). Des experts pourraient-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 précieuse expérience pour résoudre ce problème délicat.

49
user495511

Dans votre code, il devrait être

proc1.kill()

kill ou terminate sont des méthodes de l'objet Popen qui envoie le signal signal.SIGKILL au processus.

27
pyfunc

process.terminate () ne fonctionne pas lors de l'utilisation de Shell=True. Cette réponse vous aidera.

14
metanoia5

Utilisez uniquement la méthode Popen kill

process = subprocess.Popen(
    task.getExecutable(), 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    Shell=True
)
process.kill()
8

Que diriez-vous d'utiliser os.kill? Voir les documents ici: http://docs.python.org/library/os.html#os.kill

0