Я пытаюсь убить процесс (а именно iChat). В командной строке я использую следующие команды:
ps -A | grep iChat
Затем:
kill -9 PID
Однако я не совсем уверен, как перевести эти команды на Python.
Предполагая, что вы используете Unix-подобную платформу (так что она ps -A
существует),
>>> import subprocess, signal
>>> import os
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
дает вам ps -A
результат в out
переменной (строку). Вы можете разбить его на строки и зациклить на них ...:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
(вы можете избежать импорта signal
и использовать 9
вместо него signal.SIGKILL
, но мне просто не особенно нравится этот стиль, поэтому я бы предпочел использовать именованную константу таким образом).
Конечно, в этих строках можно было бы выполнять гораздо более сложную обработку, но это имитирует то, что вы делаете в оболочке.
Если вы избегаете того ps
, чего хотите , то это трудно сделать в разных Unix-подобных системах ( ps
в некотором смысле это их общий API для получения списка процессов). Но если вы имеете в виду только конкретную Unix-подобную систему (не требующую кроссплатформенной переносимости), это может быть возможным; в частности, в Linux /proc
очень полезна псевдофайловая система. Но вам нужно будет уточнить ваши точные требования, прежде чем мы сможем помочь в этой последней части.
psutil может найти процесс по имени и убить его:
источник
psutil
пакет, который может отсутствовать на целевой машине.Если вам нужно рассмотреть случай Windows, чтобы быть кроссплатформенным, попробуйте следующее:
источник
Если у вас есть killall:
Или:
источник
pkill
, хотя я думаю, что я единственный человек в мире, который использует его вместоkillall
killall java
?pkill
потому что единственное, о чемkillall
я знал, это "убить все".это сработало для меня в Windows 7
источник
Вы можете попробовать это. но перед установкой psutil с помощью
sudo pip install psutil
источник
Приведенный ниже код уничтожит все программы, ориентированные на iChat:
источник
Ты можешь использовать
pkill <process_name>
в системе unix, чтобы убить процесс по имени.Тогда код python будет:
источник
Если вы хотите убить процесс (ы) или cmd.exe с определенным заголовком (ами).
Надеюсь, поможет. Их может быть множество лучших решений для моей.
источник
вы можете использовать модуль WMI, чтобы сделать это в Windows, хотя это гораздо более неудобно, чем привыкли пользователи Unix;
import WMI
занимает много времени и есть промежуточная боль, чтобы добраться до этого процесса.источник
Для меня единственное, что сработало, это:
Например
источник
9 представляет сигнал SIGKILL. Таким образом, вы можете использовать
KILL
вместо 90r
источник
источник
Ответ Алекса Мартелли не будет работать в Python 3, потому что
out
он будет байтовым объектом и, таким образом, приведет к ошибкеTypeError: a bytes-like object is required, not 'str'
при тестированииif 'iChat' in line:
.Цитата из документации подпроцесса :
Для Python 3 это решается путем добавления аргумента
text=True
(> = Python 3.7) илиuniversal_newlines=True
вPopen
конструктор.out
затем будет возвращен как строковый объект.В качестве альтернативы вы можете создать строку, используя метод байтов decode ().
источник
источник