Como matar o processo e o subprocesso?

9

Eu perguntei a uma pergunta para saber como para 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. Usando ^ c na linha de comando parece matar o processo python, mas não o gnuprocess.

Para matar gnuchess, recebo o pid com ps aux | grep gnuchess e executa kill -9 PID . Existem outros métodos para matar o processo python e gnuchess?

    
por prosseek 08.10.2010 / 21:28

2 respostas

10

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 .

    
por 08.10.2010 / 23:45
0

Tente:

pkill <processname>
    
por 09.10.2010 / 02:02

Tags