Как получить pid процесса в Python [закрыто]

Я написал этот скрипт, чтобы остановить процессы:

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()

Но у меня есть проблема: pid всегда пуст.

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.

Как я могу решить эту проблему. Спасибо.

1
задан 8 April 2015 в 18:25

1 ответ

Bleh еще не может комментировать,

Выше правильно, но если вы используете pgrep, у вас меньше средств для очистки. Он возвращает только pid (а не всю строку ps).

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

Edit:

Если вы хотите попробовать без использования команд subprocess / shell, вы можете попробовать что-то например,

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)

Может понадобиться регулярное выражение, если «if mac_host in» не выполняет свою работу.

Используемые источники:

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

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

0
ответ дан 23 May 2018 в 21:37

Другие вопросы по тегам:

Похожие вопросы: