Estou tentando encerrar um processo (especificamente o iChat). Na linha de comando, uso estes comandos:
ps -A | grep iChat
Então:
kill -9 PID
No entanto, não tenho certeza de como traduzir esses comandos para Python.
Supondo que você esteja em uma plataforma semelhante ao Unix (para que ps -A
exista),
>>> import subprocess, signal
>>> import os
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
fornece ps -A
a saída na out
variável (uma string). Você pode dividi-lo em linhas e fazer um loop nelas ...:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
(você poderia evitar a importação signal
e usar em 9
vez de signal.SIGKILL
, mas eu simplesmente não gosto desse estilo, então prefiro usar a constante nomeada desta forma).
Claro que você poderia fazer um processamento muito mais sofisticado nessas linhas, mas isso imita o que você está fazendo no shell.
Se o que você está procurando é evitar ps
, isso é difícil de fazer em diferentes sistemas semelhantes ao Unix ( ps
é a API comum deles para obter uma lista de processos, em certo sentido). Mas se você tiver um sistema semelhante ao Unix específico em mente, apenas (não requer qualquer portabilidade de plataforma cruzada), pode ser possível; em particular, no Linux, o /proc
pseudo-sistema de arquivos é muito útil. Mas você precisará esclarecer seus requisitos exatos antes de podermos ajudar nesta última parte.
psutil pode encontrar o processo pelo nome e eliminá- lo:
fonte
psutil
pacote, que pode não estar presente na máquina de destino.Se você tiver que considerar o caso do Windows para ser multiplataforma, tente o seguinte:
fonte
Se você tiver killall:
Ou:
fonte
pkill
, embora eu pense que sou a única pessoa no mundo que usa isso em vez dekillall
killall java
?pkill
porque o único quekillall
eu conhecia era o "mata tudo".Isso funcionou para mim no Windows 7
fonte
Você pode tentar isso. mas antes você precisa instalar o psutil usando
sudo pip install psutil
fonte
O código a seguir eliminará todos os programas orientados para iChat:
fonte
Você pode usar
pkill <process_name>
em um sistema unix para matar processos pelo nome.Então, o código python será:
fonte
Se você deseja encerrar o (s) processo (s) ou cmd.exe que carrega um determinado título (s).
Espero que ajude. Podem haver várias soluções melhores para mim.
fonte
você pode usar o módulo WMI para fazer isso no Windows, embora seja muito mais desajeitado do que seu pessoal do Unix está acostumado;
import WMI
leva muito tempo e há uma dor intermediária para chegar ao processo.fonte
Para mim, a única coisa que funcionou foi:
Por exemplo
fonte
9 representa o sinal SIGKILL. Então você pode usar
KILL
no lugar de 90r
fonte
fonte
A resposta de Alex Martelli não funcionará no Python 3 porque
out
será um objeto bytes e, portanto, resultará em umTypeError: a bytes-like object is required, not 'str'
teste aoif 'iChat' in line:
.Citando a documentação do subprocesso :
Para Python 3, isso é resolvido adicionando o
text=True
(> = Python 3.7) ouuniversal_newlines=True
argumento aoPopen
construtor.out
será então retornado como um objeto string.Como alternativa, você pode criar uma string usando o método decode () de bytes.
fonte
fonte