Existe un método estándar, si los programas cooperan. Ejecute kill -- -42
donde 42 es el pid del proceso padre. Esto envía una señal a todos los procesos en el grupo de procesos liderados por el proceso 42 (el signo menos antes del pid significa grupo de procesos).
Normalmente, si ejecuta su script de Python desde un indicador de comandos de shell y simplemente se bifurca gnuchess
, los dos procesos deben permanecer en el mismo grupo de procesos. Pero este no parece ser el caso, ya que Ctrl+ Cenvía SIGINT
a todo el grupo de procesos en primer plano.
Gnuchess podría estar en su propio grupo de procesos porque se convirtió en un líder de sesión (pero no sé por qué haría esto), o porque lo bifurcaste dos veces (python bifurca un caparazón que bifurca a gnuchess). Probablemente se pueda evitar una doble bifurcación, pero no puedo decirte cómo sin ver tu código.
Una forma razonablemente confiable y compatible con POSIX de encontrar el pid del gnuchess
proceso es
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
Las variantes específicas de Unix pueden tener mejores formas de lograr esto, como pgrep
.
pkill
para matar a un proceso por el nombre, por lo que sups aux | grep gnuchess
ykill -9 PID
solo puede llegar a serpkill -9 gnuchess