J'utilise le paquet de sous-processus en Python pour lancer un sous-processus, que je dois ensuite tuer. Cependant, la documentation du paquet subprocess indique que la fonction terminate() n'est disponible qu'à partir de la version 2.6. Nous fonctionnons sous Linux avec la version 2.5 et pour des raisons de rétrocompatibilité je ne peux pas passer à 2.6, quelle est l'alternative? Je devine que ces fonctions sont des méthodes de commodité pour quelque chose.Dans Python 2.5, comment est-ce que je peux tuer un sous-processus?
Répondre
Vous appelez os.kill sur le processus pid.
os.kill(process.pid, signal.SIGKILL)
Vous êtes OK parce que vous êtes sous Linux. Les utilisateurs de Windows n'ont pas de chance.
os.kill (p.pid, signal.SIGTERM) pour être plus précis –
"kill 123" envoie SIGTERM. "kill -9 123" envoie SIGKILL. Soyez gentil avec le processus et essayez d'abord SIGTERM. – Jabba
Pour compléter @ réponse de Gareth, sous Windows, vous faites:
import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, theprocess.pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)
pas tout à fait aussi élégant que os.kill(theprocess.pid, 9)
, mais il ne fonctionne ;-)
Afin de compléter @ réponses de Gareth et @ Alex , si vous ne voulez pas vous embêter avec le système sous-jacent, vous pouvez utiliser psutil.
psutil est un module fournissant une interface pour récupérer des informations sur l'exécution des processus et système d'utilisation (CPU, mémoire) dans une manière portable en utilisant Python, mise en œuvre de nombreuses fonctionnalités offertes par les outils de ligne de commande comme ps, top, kill et gestionnaire de tâches Windows.
Il prend actuellement en charge Linux, OS X, FreeBSD et Windows avec les versions Python de 2,4 à 3,1 en utilisant une base de code unique.
Voilà une copie & pase solution complète:
def terminate_process(pid):
# all this shit is because we are stuck with Python 2.5 and
# we cannot use Popen.terminate()
if sys.platform == 'win32':
import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)
else:
os.kill(pid, signal.SIGKILL)
Acceptant rapports de bugs que les commentaires;)
- 1. Comment est-ce que je peux tuer un arbre entier de processus avec Perl?
- 2. Comment puis-je implémenter un OutputStream que je peux rembobiner?
- 3. Comment puis-je lister les méthodes dans un module Python 2.5?
- 4. Convertisseur Python 2.5 en Python 2.2
- 5. Comment tuer un spid indiscipliné dans Sybase?
- 6. Comment est-ce que je peux rendre à un cubemap?
- 7. Python 2.5 socket._fileobject est quoi dans Python 3.1?
- 8. Comment tuer un thread MFC?
- 9. VIM: Utilisez Python 2.5 avec vim 7.2
- 10. Faire une façade en Python 2.5
- 11. Comment puis-je tuer mon application mobile?
- 12. Comment est-ce que je peux fondre dans un ensemble d'images? pas un diaporama
- 13. Problèmes sur un module de sélection sur Python 2.5
- 14. Random in python 2.5 ne fonctionne pas?
- 15. Pylônes - utilisez Python 2.5 ou 2.6?
- 16. Ressort 2.5 dans un conteneur EJB
- 17. Comment est-ce que je peux attraper un symbole que l'utilisateur est frappé sur le clavier?
- 18. Comment est-ce que je peux patcher des assemblys .NET?
- 19. Générer un jeton que je peux prouver J'ai généré
- 20. Comment est-ce que je peux simplifier ce jquery répétitif?
- 21. Comment est-ce que je peux énumérer DataTable?
- 22. Comment tuer des boucles dans Xcode?
- 23. Comment est-ce que je peux changer l'espace de noms sur chaque noeud dans un DOM?
- 24. Dans postgresql: Comment créer un compteur simple que je peux réinitialiser?
- 25. Comment est-ce que je peux montrer une représentation plate d'un GtkTreeStore dans un GtkTreeView?
- 26. Comment est-ce que je peux assiter le Caret à un contrôle dans WPF
- 27. Comment puis-je contourner le fait que je ne peux pas mettre un bloc de code dans un fichier skin?
- 28. C# - Je sais que je peux le faire dans LINQ, mais je ne peux pas le faire fonctionner
- 29. Comment tuer un fil instantanément en C#?
- 30. Problème de compatibilité Python 2.5 et 2.6 et Numpy
Cool: Si je colle ensemble les réponses que je reçois le code 'portable'! – Blauohr
Il ya une réponse portable déjà collée http://stackoverflow.com/a/8536476/192632 – bogdan