Como obter o pid de um processo em Python [closed]

0

Eu escrevi este script para interromper processos:

parser = argparse.ArgumentParser(description='this script allows you to   connect a device in your network')
parser.add_argument('-m', '--mac', dest='mac', type=str, required=True, help='put mac of victim')
args = parser.parse_args()
mac_host =str(args.mac)
print "mac_host %s"%mac_host
p = subprocess.Popen("sudo kill -9 $(sudo ps aux|grep '(" + mac_host + ")'|grep -v grep|awk '{print $2}')", shell=True, stdout=subprocess.PIPE)
output = p.communicate()[0].rstrip()

Mas eu tenho um problema: o pid está sempre vazio.

mac_host 14:KL:73:GH:45:7f

Usage:

    kill pid ... Send SIGTERM to every process listed.
    kill signal pid ... Send a signal to every process listed.
    kill -s signal pid ... Send a signal to every process listed.
    kill -l List all signal names.
    kill -L List all signal names in a nice table.
    kill -l signal Convert between signal numbers and names.

Como posso resolver este problema? Obrigado.

    
por user4650183 08.04.2015 / 15:09

2 respostas

0

Eu acho que isso deveria ser uma expressão regular?

grep '(" + mac_host + ")'

Experimente com egrep ou grep -e .

Parece que você deseja usar expressões regulares, mas está procurando exatamente o termo inserido acima. Ou se é chamado mac_host alle o tempo, então se livre de todo o resto

grep "mac_host"

Coloque também um

set +x

no seu script para depurar seu script.

Felicidades, s1mmel

    
por s1mmel 08.04.2015 / 15:19
0

Bleh ainda não pode comentar,

Acima está correto, mas se você usar o pgrep, terá menos para limpar. Apenas retorna o pid (e não a linha inteira de ps).

p = subprocess.Popen("sudo kill -9 $(sudo ps aux| pgrep '(" + mac_host + ")')", shell=True, stdout=subprocess.PIPE)

Editar:

Se você quiser tentar sem usar comandos subprocessos / shell, tente algo assim,

import os
from signal import SIGKILL


pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
for pid in pids:
    if mac_host in open(os.path.join('/proc', pid, 'cmdline'), 'rb').read():
        os.kill(int(pid), SIGKILL)

Pode precisar de regex se "se mac_host in" não funcionar, no entanto.

Fontes usadas:

how-to-terminate-process-from-python-using -pid

lista-de-processos-no-linux-via-python

    
por Sinn3d 08.04.2015 / 17:20