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
gdbeattachpara o pai:
attach 3100 - Chame
waitpidpara o zumbi:
call waitpid(3101,0,0) - Desanexe do pai (
detach) e saia do depurador.
(Este é um rifle sniper bem ajustado.)