web-development-kb-pt.site

Como matar o processo e subprocesso?

Eu perguntei ma pergunta para saber como obter várias linhas de mensagem do módulo subprocesso do Python.

O problema é que no curso de testes, tive que matar o processo python que executa o processo gnuchess. Usando ^ c Na linha de comando parece matar o processo python, mas não o gnuprocesso.

Para matar Gnuchess, recebo o PID com PS AUX | gnuchess grep e executar matar -9 pid. Há outros métodos para matar ambos python e processo gnuchess?

9
prosseek

Existe um método padrão, se os programas cooperarem. Corre kill -- -42 onde 42 é o PID do processo pai. Isso envia um sinal para todos os processos no grupo Líder pelo processo 42 (o sinal de menos antes do processo PID grupo).

Normalmente, se você executar seu script python de um prompt de shell e simplesmente garfo gnuchess, os dois processos devem permanecer no mesmo grupo de processo. Mas isso não parece ser o caso, já que Ctrl+.C Envia SIGINT para todo o grupo de processos de primeiro plano.

Gnuchess pode estar em seu próprio grupo de processo porque se tornou um líder de sessão (mas eu não sei por que faria isso), ou porque você o bifurcou (python garfos uma casca que garfo Gnuchess). Um garfo duplo é provavelmente evitável, mas não posso dizer como sem ver seu código.


Uma maneira completa razoavelmente confiável e posix de encontrar o PID do processo gnuchess é

gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')

Variantes específicas do UNIX podem ter maneiras melhores de alcançar isso, como pgrep.

10

Experimentar:

pkill <processname>
0
Quandary