Mate um processo que continua reiniciando

16

E se 'kill -9' não funcionar? ou Como matar um script que inicia novos processos? não me ajuda de qualquer maneira.

Eu tenho um script python que inicia automaticamente com outra identificação de processo usando a mesma porta quando morto usando sudo kill -9 <pid>.

$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13242 ubuntu    3u  IPv4  64592      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill -9 13242
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16106 ubuntu    3u  IPv4  74792      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill 16106
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16294 ubuntu    3u  IPv4  75677      0t0  TCP localhost:3002 (LISTEN)

Não é um processo de zumbi.

$ ps -Al

4 S     0 16289     1  0  80   0 - 12901 poll_s ?        00:00:00 sudo
4 S  1000 16293 16289  0  80   0 -  1100 wait   ?        00:00:00 sh
0 S  1000 16294 16293  0  80   0 - 34632 poll_s ?        00:00:00 python

Eu até tentei sudo pkill -f <processname>sem sorte. Não quer morrer.

Atualizar:

Seu processo pai é shcujo pai é sudocomo mencionado na tabela acima. Não tenho certeza se é seguro matá-los abruptamente. Além disso, este é um servidor ubuntu compartilhado.

Lakshminarayanan Guptha
fonte
Parece que está morrendo bem. Sua lsofsaída mostra um novo pid toda vez. O processo está simplesmente reiniciando.
Patrick
Sim, não quer morrer para sempre. Acorda como se nunca tivesse morrido :(
Lakshminarayanan Guptha

Respostas:

25

Inicia automaticamente com outro ID de processo significa que é um processo diferente. Portanto, há um processo pai, que monitora seus filhos e, se um morre, ele é reaparecido pelo pai. Se você deseja interromper o serviço completamente, descubra como interromper o processo pai. SIGKILLÉ claro que matá-lo é uma das opções, mas provavelmente não o The Right One TM , pois o monitor de serviço pode precisar fazer uma limpeza para desligar corretamente.

Para localizar o processo do monitor, pode ser necessário inspecionar toda a lista de processos, pois os ouvintes reais podem se dissociar dos pais (geralmente pelo fork() + setsid()combo). Nesse caso, acho a saída de ps faux( procpspelo menos, pode variar para outras implementações) bastante útil - lista todos os processos em uma árvore hierárquica. A menos que tenha havido uma quebra de PID (consulte também a wikipedia ), o PID do monitor deve ser menor que o PID de qualquer um dos ouvintes (a menos que, é claro, você tenha atingido uma envolvente de PID).

peterph
fonte
Seu pai é shcujo pai é sudo. Tudo bem matá-los?
Lakshminarayanan Guptha 29/09
Pai de qual processo? Aquele que está ouvindo na porta 3002? Nesse caso, liste todos os processos e adivinhe qual é o monitor. Com o linux procps, geralmente considero a saída ps -fauxbastante informativa. Observe também que o PID do monitor deve ser menor que o PID do ouvinte real (a menos que você tenha o sistema ativo por algum tempo e os PIDs já estejam quebrados desde que o serviço foi iniciado, é claro).
Peterph
Ótimo. ps -fauxajudou a começar a matar dos pais. Você pode atualizar sua resposta com a solução do comentário?
Lakshminarayanan Guptha
Sim, eu estava pensando sobre isso ... :)
peterph
ps fauxajudou a detectar supervisordque interminavelmente reiniciado enforcados Laravel fila de daemon
antongorodezkiy
4

Se você conhece a porta de atendimento do processo, pode usar fusercom -ksinalizador.

Algo como,

fuser -k 3002/tcp
Ramesh
fonte