web-dev-qa-db-fra.com

Est-il possible de tuer un processus sous Windows depuis Python?

J'utilise Python 2.6. Parfois, plusieurs instances d'un certain processus s'ouvrent et ce processus pose en lui-même certains problèmes. Je veux pouvoir détecter par programme qu'il existe plusieurs instances de ce processus et les tuer.

Par exemple, dans certains cas, il peut y avoir 50 instances de make.exe ouvertes. Je veux pouvoir dire qu'il y a 20 cas ouverts et les tuer tous. Comment est-ce accompli?

37
cupof

Je pense que vous pourriez simplement utiliser taskkill et le Python os.system ()

import os
os.system("taskkill /im make.exe")

Remarque: je voudrais simplement noter que vous devrez peut-être qualifier pleinement le chemin d'accès aux tâches. J'utilise une box Linux donc je ne peux pas tester ...

47
Nix

Oui, vous pouvez le faire

import os
os.system("taskkill /f /im  Your_Process_Name.exe")
  1. / f: spécifie que le ou les processus doivent être interrompus de force.
  2. / im (ImageName): spécifie le nom d'image du processus à terminer.
  3. Pour plus d'informations sur TaskKill
12
Avinash Jeeva

Il existe une belle plateforme multiplateforme python utilitaire psutil qui expose une routine kill () sur un processus qui peut être répertorié avec psutil. process_iter ().

Il y a déjà un exemple dans l'autre thread: https://stackoverflow.com/a/4230226/4571444

4
Pshemy108

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 devez lui donner une poignée de processus. Si le processus est démarré à partir de votre code, le descripteur de processus est renvoyé par CreateProcess ou popen.

Si le processus a été lancé par autre chose, vous devez obtenir ce handle que vous pouvez utiliser EnumProcess ou WMI pour le récupérer.

3
luc

Que diriez-vous de cela, je l'ai testé avec ActiveState Python 2.7:

import sys, traceback, os

def pkill (process_name):
    try:
        killed = os.system('tskill ' + process_name)
    except Exception, e:
        killed = 0
    return killed

appelez-le avec:

pkill("program_name")
2
Giovanni