Существует стандартный метод, если программы сотрудничают. Запустите, 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
чтобы убить процесс по имени, так что выps aux | grep gnuchess
иkill -9 PID
можете просто статьpkill -9 gnuchess