Існує стандартний метод, якщо програми співпрацюють. Виконати kill -- -42
там, де 42 - під батьківського процесу. Це посилає сигнал усім процесам у групі процесів, що ведуть за допомогою процесу 42 (знак мінус перед підом означає групу процесу).
Як правило, якщо ви запускаєте скрипт python з підказки оболонки і він просто розщеплюється gnuchess
, два процеси повинні залишатися в одній групі процесів. Але це, мабуть, не так, оскільки Ctrl+ Cнадсилає SIGINT
всю групу процесу переднього плану.
Gnuchess може бути у власній групі процесів, тому що він зробив себе лідером сеансу (але я не знаю, чому це було б зробити) або тому, що ви подвійно розщедрили його (python forks shell, який вилить 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