A maneira somente de se livrar de um zumbi é tornar seu pai wait()
para que ele possa relatar seu status de saída. Você pode fazer isso enviando SIGCHLD
para o pai, assumindo que o pai está escrito corretamente.
Se você tem zumbis, normalmente significa que o pai é NÃO escrito corretamente (porque a criança já enviou SIGCHLD
para seu pai quando ele morreu e se tornou um zumbi) , então o próximo passo é matar os pais.
Uma ferramenta como pstree
(com a opção -p
) pode mostrar a linhagem de seus zumbis para que você saiba qual processo é o pai.
Quando o pai morre, o zumbi é adotado por init
, que é sempre wait()
ing para crianças morrerem, e vai matar todos os zumbis que adotar.
Se o processo pai for realmente init
(PID 1), você já está em uma situação que nunca deveria acontecer. Você pode tentar enviar SIGCHLD
para init
, mas você realmente não deveria ter que fazer isso, e se isso não funcionar, seu único recurso é reinicializar porque o init
do seu sistema está quebrado e não está fazendo seu trabalho.
(Estas são as opções de "espingarda").
Algumas pessoas mais criativas do que eu também vieram com esta opção se você quiser evitar a morte do processo pai:
- Determine o zumbi & processos PIDS 'PIDS
(Para este exemplo, digamos que o zumbi é o PID 3101 e o pai é o PID 3100) - Acione
gdb
eattach
para o pai:
attach 3100
- Chame
waitpid
para o zumbi:
call waitpid(3101,0,0)
- Desanexe do pai (
detach
) e saia do depurador.
(Este é um rifle sniper bem ajustado.)