Я задал вопрос, чтобы узнать, как получить несколько строк сообщения из модуля подпроцесса Python.
Проблема в том, что в ходе тестирования мне пришлось убить процесс python, который запускает процесс gnuchess. Использование ^ c в командной строке убивает процесс python, но не gnuprocess.
За убийство гнусесс я получаю ps aux | grep gnuchess и запустить kill -9 PID . Существуют ли другие методы для уничтожения процессов как Python, так и Gnuchess?
pkill
чтобы убить процесс по имени, так что выps aux | grep gnuchess
иkill -9 PID
можете просто статьpkill -9 gnuchess
Ответы:
Существует стандартный метод, если программы сотрудничают. Запустите,
kill -- -42
где 42 - pid родительского процесса. Это посылает сигнал всем процессам в группе процессов, возглавляемой процессом 42 (знак минус перед pid означает группу процессов).Обычно, если вы запускаете скрипт Python из командной строки и он просто разветвляется
gnuchess
, два процесса должны оставаться в одной группе процессов. Но, похоже, это не так, поскольку Ctrl+ CотправляетSIGINT
всей группе процессов переднего плана.Gnuchess может быть в своей собственной группе процессов, потому что он сделал себя лидером сеанса (но я не знаю, почему он это сделал), или потому что вы дважды его разветвили (python разветвляет оболочку, которая разветвляет gnuchess). Двойной вилки, вероятно, можно избежать, но я не могу сказать вам, как, не увидев ваш код.
Достаточно надежный и POSIX-совместимый способ найти pid
gnuchess
процессаОпределенные варианты Unix могут иметь лучшие способы достижения этого, такие как
pgrep
.источник
Пытаться:
источник