it-swarm.dev

É possível matar um processo no Windows a partir do Python?

Estou usando Python 2.6. Às vezes, existem várias instâncias de um determinado processo aberto, e esse processo causa alguns problemas em si. Quero poder detectar programaticamente que existem várias instâncias desse processo e matá-las.

Por exemplo, talvez em alguns casos existam 50 instâncias do make.exe abertas. Quero poder dizer que há 20 instâncias abertas e matar todas elas. Como isso é realizado?

37
cupof

Eu acho que você poderia apenas usar taskkill e o Python os.system ()

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

Nota: Gostaria apenas de observar que talvez você precise qualificar totalmente o caminho do skillkill. Estou usando uma caixa Linux, então não posso testar ...

47
Nix

Sim, você pode fazer isso

import os
os.system("taskkill /f /im  Your_Process_Name.exe")
  1. / f: especifica que o (s) processo (s) deve ser terminado à força.
  2. / im (ImageName): especifica o nome da imagem do processo a ser finalizado.
  3. Para mais informações sobre TaskKill
12
Avinash Jeeva

Existe uma plataforma agradável python psutil que expõe uma rotina kill () em processos que podem ser listados com o psutil. process_iter ().

Já existe um exemplo no outro encadeamento: https://stackoverflow.com/a/4230226/4571444

4
Pshemy108

Você pode usar o TerminateProcess da API do win32 para matar um processo. Veja o exemplo a seguir: http://code.activestate.com/recipes/347462-terminating-a-subprocess-on-windows/

Você precisa identificá-lo. Se o processo for iniciado a partir do seu código, o identificador do processo será retornado pelo CreateProcess ou popen.

Se o processo foi iniciado por outra coisa, você precisa obter esse identificador, pode usar EnumProcess ou WMI para recuperá-lo.

3
luc

Que tal isso, eu testei com o 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

chame-o com:

pkill("program_name")
2
Giovanni