Убейте процесс, используя его имя внутри linux (Python)
это работает, но он убивает каждый процесс Python.
pkill python
однако, я не могу сделать:
pkill myscript.py
Я тоже пробовал команду killall, но и без везения. Должен ли я использовать регулярные выражения?
кстати, я хочу сделать это в скрипте python с импорт ОС.
5 ответов
вы запустили подпроцесс Python из того же скрипта, из которого вы его убиваете? Если это так, см. этот вопрос для сведения. Если нет, вы можете использовать pkill
опция s-f для поиска имени сценария в списке аргументов процесса Python, но вы все равно рискуете убить то, что вы не намеревались. Вижу man page для получения дополнительной информации.
вы можете иметь процесс записи, это pid
в файл?
В Python вы получаете pid следующим образом:
import os
os.getpid()
убийство по имени удобен, но иногда имеет нежелательные последствия, как вы видели.
вам нужно найти идентификатор процесса (pid). Вы можете использовать команду "ps-a / grep NAME", а затем применить"kill -9 PID". Эти команды можно легко перевести на python.
попытка использовать " имя " (как в pkill) может дать несколько совпадений и, следовательно, неожиданные результаты (по крайней мере, в контексте, заданном выше в вопросе).
попробуйте это:
echo '#!/usr/bin/env python' > myscript
cat myscript.py >>myscript
chmod +x myscript
./myscript
конечно, вам придется изменить код, чтобы убить процесс с именем " myscript"
В системах UNIX исполняемый файл содержит несколько байтов в начале, которые сообщают ОС, какой двоичный формат используется. Если первые два байта #!
тогда ОС предполагает, что это на самом деле текстовый файл, который может быть выполнен другой программой, и ОС загружает другую программу и передает ей текстовый файл.
в этом случае я, вероятно, мог бы написали #!/usr/bin/python
в верхней строке, но если ваш python находится в /usr/local/bin
, тогда это не сработает. Вместо этого я используюenv
чтобы заставить его искать ваш обычный путь для python. Все системы UNIX имеют env в / usr / bin. Для получения дополнительной информации вы можете ввести man env
.