Est-il possible de tuer un processus sur Windows à partir de Python?
Je suis en utilisant Python 2.6. Parfois, existe-t-il plusieurs instances d'un certain processus ouvert, et le processus, à cause de certains problèmes en soi. Je veux être en mesure d'en programmant détecter qu'il y a plusieurs instances de ce processus et de les tuer.
Par exemple, peut-être, dans certains cas, il y a 50 instances de make.exe ouvert. Je veux être en mesure de dire qu'il y a 20 instances ouvertes, et les tuer tous. Comment est-ce que c'est possible?
- Les réponses ci-dessous, mais vous pouvez essayer d'utiliser
psutil
: psutil.readthedocs.io/en/latest/#kill-processus-tree
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez simplement utiliser taskkill et le Python os.system()
Remarque: je voudrais juste noter que vous pourriez avoir à obtenir le taskkill chemin. Je suis l'aide d'une machine sous Linux, donc je ne peux pas tester...
os.popen('tasklist').readlines()
pour obtenir une liste des processus en cours d'exécution, et peut donc compter le nombre de cas, le processus que vous recherchez apparaît dans la liste et l'utiliser pour déterminer si il est temps pour tous les tuer. L'utilisation desubprocess.Popen()
est un peu plus compliqué, maisos.popen()
était déconseillé de commencer avec la version 2.6 de Python, donc il n'y a qu'à garder à l'esprit. Voir stackoverflow.com/questions/3215262/monitor-process-in-python/... pour savoir comment utilisersubprocess.Popen()
pour ce même type de tâche.os.popen('tasklist').read()
peut être utilisée pour obtenir la liste complète sous forme de chaîne, si il y a unstr
fonction pour compter les occurrences d'une sous-chaîne dans une chaîne plus longue.subprocess.check_output('tasklist')
va faire beaucoup mieux à la manipulation d'erreurOui,Vous pouvez le faire
résilié.
Il y a une belle croix-plate-forme de python utilitaire psutil qui expose une kill() de routine sur un processus qui peuvent être répertoriés avec psutil.process_iter().
Il y a déjà un exemple dans l'autre thread: https://stackoverflow.com/a/4230226/4571444
Vous pouvez utiliser le
TerminateProcess
de l'api win32 pour tuer un processus. Voir l'exemple suivant : http://code.activestate.com/recipes/347462-terminating-a-subprocess-on-windows/Vous avez besoin de lui donner une poignée de processus. Si le processus est démarré à partir de votre code, le handle de processus est retourné par la fonction CreateProcess ou popen.
Si le processus a été lancé par autre chose, vous avez besoin pour obtenir la poignée vous pouvez utiliser EnumProcess ou WMI pour le récupérer.
Comment à ce sujet, je l'ai testé avec ActiveState Python 2.7:
appeler avec: