Existe um método padrão, se os programas cooperarem. Execute kill -- -42
onde 42 é o pid do processo pai. Isso envia um sinal para todos os processos no grupo de processos liderados pelo processo 42 (o sinal de menos antes do pid significa grupo de processos).
Normalmente, se você executar seu script python a partir de um prompt de shell e ele simplesmente se bifurcar gnuchess
, os dois processos deverão permanecer no mesmo grupo de processos. Mas esse não parece ser o caso, pois o Ctrl+ Cenvia 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 isso faria isso) ou porque você o bifurcou duas vezes (o python bifurca um shell que bifurca o gnuchess). Um garfo duplo provavelmente é evitável, mas não posso dizer isso sem ver seu código.
Uma maneira razoavelmente confiável e compatível com POSIX de encontrar o pid do gnuchess
processo é
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
Variantes unix específicas podem ter melhores maneiras de conseguir isso, como pgrep
.
pkill
para matar um processo pelo nome, para que o seups aux | grep gnuchess
ekill -9 PID
pode apenas tornarpkill -9 gnuchess