Можно ли убить процесс в Windows изнутри Python? - PullRequest
36 голосов
/ 08 июня 2011

Я использую Python 2.6 . Иногда возникает несколько открытых процессов, и этот процесс сам по себе вызывает некоторые проблемы. Я хочу иметь возможность программно обнаруживать наличие нескольких экземпляров этого процесса и уничтожать их.

Например, в некоторых случаях может быть открыто 50 экземпляров make.exe. Я хочу быть в состоянии сказать, что открыто 20 экземпляров, и убить их всех. Как это достигается?

Ответы [ 5 ]

43 голосов
/ 08 июня 2011

Я думаю, вы могли бы просто использовать taskkill и Python os.system ()

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

Примечание. Я хотел бы просто отметить, что вам, возможно, придется полностью указать путь к заданию. Я использую коробку Linux, поэтому я не могу проверить ...

10 голосов
/ 20 января 2017

Да, вы можете сделать это

import os
os.system("taskkill /f /im  Your_Process_Name.exe")
  1. / f: указывает на принудительное завершение процесса (ов).
  2. / im (ImageName): указывает имя изображения процесса, который будет прекращается.
  3. Для получения дополнительной информации о TaskKill
4 голосов
/ 01 июня 2017

Существует хорошая кроссплатформенная утилита python psutil , которая предоставляет процедуру kill () для процессов, которые могут быть перечислены с помощью psutil.process_iter ().

В другой теме уже есть пример: https://stackoverflow.com/a/4230226/4571444

3 голосов
/ 08 июня 2011

Вы можете использовать TerminateProcess API Win32, чтобы убить процесс.Смотрите следующий пример: http://code.activestate.com/recipes/347462-terminating-a-subprocess-on-windows/

Вам нужно дать ему дескриптор процесса.Если процесс запускается из вашего кода, дескриптор процесса возвращается CreateProcess или popen.

Если процесс был запущен чем-то другим, вам нужно получить этот дескриптор, который вы можете использовать EnumProcess или WMI , чтобы получить его.

2 голосов
/ 18 июля 2014

Как насчет этого, я протестировал его с 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

, позвоните с помощью:

pkill("program_name")
...