Fiz uma pergunta para saber como obter várias linhas de mensagem do módulo de subprocesso do Python.
O problema é que, durante o teste, eu tive que matar o processo python que executa o processo gnuchess. Usar ^ c na linha de comando parece matar o processo python, mas não o processo gnu.
Por matar gnuchess, recebo o pid com ps aux | grep gnuchess e execute kill -9 PID . Existem outros métodos para matar os processos python e gnuchess?
pkill
para matar um processo pelo nome, para que o seups aux | grep gnuchess
ekill -9 PID
pode apenas tornarpkill -9 gnuchess
Respostas:
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+ CenviaSIGINT
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 éVariantes unix específicas podem ter melhores maneiras de conseguir isso, como
pgrep
.fonte
Tentar:
fonte