Как убить как процесс, так и подпроцесс?

Я задал вопрос о том, как получить несколько строк сообщения из модуля подпроцесса Python.

Проблема в том, что в ходе тестирования мне пришлось убить процесс python, который запускает процесс gnuchess. Использование ^ c в командной строке, похоже, убивает процесс python, но не gnuprocess.

Для убийства gnuchess я получаю pid с ps aux | grep gnuchess и запустить kill -9 PID . Существуют ли другие методы для уничтожения процесса python и gnuchess?

Существует стандартный метод, если программы сотрудничают. Run kill -- -42 где 42 – pid родительского процесса. Это посылает сигнал всем процессам в группе процессов, выполняемой процессом 42 (знак минуса перед группой процессов pid).

Обычно, если вы запускаете свой скрипт python из командной строки, и он просто вилки gnuchess , эти два процесса должны оставаться в одной и той же группе процессов. Но это, похоже, не так, поскольку Ctrl + C отправляет SIGINT всей группе процессов переднего плана.

Gnuchess может быть в собственной группе процессов, потому что он сделал себя лидером сессии (но я не знаю, почему это было бы так), или потому, что вы его дважды разветвляли (python разворачивает оболочку, которая вилка gnuchess). Двойной вилок, вероятно, можно избежать, но я не могу сказать вам, как не видеть ваш код.


Достаточно надежный и POSIX-совместимый способ поиска pid процесса gnuchess – это

 gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}') 

У конкретных вариантов Unix могут быть лучшие способы достижения этого, например pgrep .

Пытаться:

 pkill <processname>