De forma bem simplificada (ou em termos leigos), processo zumbi é aquele que ainda pode ser visto na tabela de processos, mesmo que já tenha sido finalizado.
Processos nestas condições também são chamados “defuntos” (ou defunct).
Para entender como os zumbis são criados, é necessário compreender como os processos são retirados do espaço da memória do sistema, após serem finalizados
Apesar da coincidência de temas, não há nada de macabro neste post.
Sob o ponto de vista técnico, a presença de zumbis no seu sistema é uma realidade, provavelmente, constante — e normalmente não é preocupante.
Como os zumbis aparecem
A cada vez que um processo completa seu ciclo e termina sua execução com sucesso, ele desocupa a memória e avisa que “morreu” ao processo que lhe deu origem (processo pai).
Neste momento, o pai deve executar uma chamada de sistema (system call) WAIT, que faz a leitura do estado do filho morto.
Quando o WAIT termina de ser executado, o cadáver é removido da memória — e a vida segue.
O problema aparece quando há defeitos no código do processo pai ou, por alguma razão, este é incapaz de ler o estado do processo filho.
Neste caso, a chamada de sistema pode simplesmente não ocorrer.
Como consequência, o cadáver não é removido, permanece na memória e continua aparecendo na tabela de processos.
Toda esta operação, descrita acima, é muito rápida.
Os zumbis são previstos pelo Linux.
São inócuos e, na maioria das vezes, nem são notados.
Muitos tem PID 1 como pai, que é o próprio init.
O init executa um processo de limpeza periódica que acaba por remover naturalmente os zumbis do sistema.
Por isto, é seguro dizer que não há com que se preocupar.
Como encontrar zumbis no Linux
Use o comando ps para checar o seu sistema:
ps axu | grep Z
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND justinc+ 1920 0.0 0.0 0 0 tty2 Z+ nov07 0:00 [single]justinc+ 20324 0.0 0.0 12792 932 pts/1 S+ 17:57 0:00 grep --color=auto Z
Observe a coluna STAT, que informa o estado de cada processo listado.
A letra Z indica quando um processo está em estado zombie.
Como matar zumbis
Você não pode matar o que já está morto!
Não é possível terminar processos zumbis. Eles já estão finalizados.
Se a situação te preocupa, é possível informar ao processo pai que “sua criança” está morta — para que rodem a chamada de sistema WAIT.
Use o comando pstree para descobrir qual é o PID do processo pai.
Em seguida, é possivel enviar o sinal SIGCHLD para o PID do pai:
kill -s SIGCHLD ppid
Acima, substitua ppid pelo número do PID do processo pai.
Impacto da presença de processos zumbis no sistema
Como já foi dito, ocupam pouco espaço e sua presença, em geral, é inofensiva e sequer chega a ser percebida.
Mas há casos em que a quantidade de zumbis continua a crescer — às vezes rapidamente. Aí, sim, temos um problema.
Como consequencia da multiplicação dos zumbis, podemos nos deparar com 2 stuações desagradáveis:
- Cada zumbi mantem seu PID enquanto cria novos processos, com novos PIDs.
Depois de um tempo, as possibilidades de criar novos PIDs sao exauridas pelo kernel do sistema. - Mesmo que cada zumbi ocupe apenas uma quantidade muito pequena de memoria, um numero muito grande deles pode fazer a diferença e causar a lentidao ou, mesmo, o travamento do sistema.
Você pode agir individualmente em relação a cada zumbi… ou não.
Pode ser legal mostrar aos seus amigos que você tem uma ou outra “criatura” destas habitando o seu sistema, temporariamente.
É possível que o seu amigo também tenha…
Só uma rápida e crescente multiplicação deles é que irá exigir uma medida mais drástica: reboot, para limpar o sistema.
4 replies on “Como lidar com um processo zumbi no Linux”
estou começando agora a me aprofundar na administração de sistemas linux, tenho um longo caminho para percorrer ainda, mas seu site é sempre fonte de conhecimento para mim, está me ajudando demais.
Muito obrigado! 😉
Ótimo texto, já me ocorreu várias vezes de encontrar processos zumbi no meu sistema, o mais comum é com o Firefox que para de responder quando tem muitas abas abertas, o sistema fica realmente muito lento. Eu tentava matar os processos zumbis (que “noobice”), como não conseguia, acabava reinicializando o pc.
Elias, gosto da maneira como escreve , me faz lembrar de outro mestre em hardware e Linux, inclusive tenho alguns livros dele: Carlos E. Morimoto.
Obrigado!
O Morimoto é uma ótima referência. Ajudou muita gente, com certeza! 😉