Убить процесс, используя его имя внутри linux (Python) - PullRequest
7 голосов
/ 23 октября 2009

это работает, но убивает каждый процесс Python.

pkill python

Однако я не могу сделать:

pkill myscript.py

Я также пробовал killall , нобез удачи тоже.Нужно ли использовать регулярные выражения?

Кстати, я хочу сделать это в скрипте Python с import os.

Ответы [ 5 ]

5 голосов
/ 23 октября 2009

Запускали ли вы подпроцесс Python из того же сценария, от которого его убиваете? Если так, см. этот вопрос для деталей. Если нет, вы можете использовать опцию -f pkill для поиска имени скрипта в списке аргументов процесса Python, но вы все равно рискуете убить что-то, что не намеревался. Для получения дополнительной информации см. Справочную страницу .

2 голосов
/ 25 апреля 2016

sudo kill -9 `pgrep python`

Эта команда уничтожит все запущенные процессы Python

2 голосов
/ 23 октября 2009

Вы можете сделать так, чтобы процесс записал pid в файл?
В Python вы получаете pid так:

import os
os.getpid()

Убийство по имени удобно, но, как вы видели, иногда имеет нежелательные последствия.

0 голосов
/ 23 октября 2009

Попробуйте это:

echo '#!/usr/bin/env python' > myscript
cat myscript.py >>myscript
chmod +x myscript
./myscript

Конечно, вам придется изменить код, чтобы убить процесс с именем "myscript" В системах UNIX исполняемый файл в начале содержит несколько байтов, которые сообщают ОС, какой двоичный формат используется. Если первые два байта равны #!, то ОС предполагает, что это фактически текстовый файл, который может быть выполнен другой программой, и ОС загружает другую программу и передает ей текстовый файл.

В этом случае я, вероятно, мог бы написать #!/usr/bin/python в верхней строке, но если ваш питон находится в /usr/local/bin, то он не будет работать. Вместо этого я использую env, чтобы заставить его искать ваш обычный путь для Python. Все системы UNIX имеют env в / usr / bin. Для получения дополнительной информации вы можете ввести man env.

0 голосов
/ 23 октября 2009

вам нужно найти идентификатор процесса (pid). Вы можете использовать команду «ps -A | grep NAME», а затем применить «kill -9 PID». Эти команды могут быть легко переведены на Python.

Попытка использовать «имя» (как в pkill) может привести к нескольким совпадениям и, следовательно, к неожиданным результатам (по крайней мере, в контексте, указанном выше в вопросе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...