Existe um método padrão, se os programas cooperarem. Execute kill -- -42
em que 42 é o pid do processo pai. Isso envia um sinal para todos os processos no grupo de processos liderado pelo processo 42 (o menos assine antes que o pid signifique o grupo do processo).
Normalmente, se você executar seu script python a partir de um prompt de shell e ele simplesmente forks gnuchess
, os dois processos devem permanecer no mesmo grupo de processos. Mas este não parece ser o caso, uma vez que Ctrl + C envia SIGINT
para todo o grupo de processos em primeiro plano.
O Gnuchess pode estar em seu próprio grupo de processos porque se tornou um líder de sessão (mas não sei por que ele faria isso), ou porque você o duplicou (o python bifurca um shell que bifurca gnuchess) . Um garfo duplo é provavelmente evitável, mas não posso dizer como sem ver seu código.
Uma maneira razoavelmente confiável e compatível com POSIX de encontrar o pid do processo gnuchess
é
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
Variantes unix específicas podem ter melhores formas de alcançar isso, como pgrep
.