Skip to main content

O que é um processo de zumbi?

Um processo zumbi é uma instância de um programa de computador que mantém um registro da tabela de processos, apesar de ter terminado de executar. Processos extintos como esses são normalmente associados ao Unix® e outros sistemas operacionais semelhantes devido à maneira como eles lidam com processos filhos. Quando um processo filho termina a execução, o pai geralmente é responsável por removê-lo da tabela de processos. Geralmente, não é possível remover diretamente um processo zumbi com o comando kill, embora o pai possa frequentemente removê-lo se o operador usar a notificação do sinal filho (SIGCHLD). Caso contrário, um processo zumbi pode ser removido indiretamente matando o pai.

Processo zumbi é um termo descritivo metafórico que faz referência aos mortos-vivos. Processos extintos no Unix® e sistemas operacionais semelhantes podem ser vistos como análogos aos zumbis, pois mantêm uma presença na tabela de processos, apesar de não desempenharem mais as funções pretendidas. Quando um processo termina de executar, às vezes é dito que ele morreu, enquanto os meios pelos quais o sistema operacional recupera sua alocação de tabela de processo podem ser conhecidos como colheita. Tecnicamente, o processo pai de um zumbi colhe seus filhos, embora isso nem sempre aconteça.

Existem certos casos em que a existência de um processo zumbi pode ser intencional ou mesmo desejada. Depois que um processo filho interrompeu a execução, o pai pode precisar executar outra instância do mesmo programa posteriormente. Se um zumbi não foi removido da tabela de processos, um novo filho não receberá a mesma identificação (ID) que o filho anterior. Certos programas podem se beneficiar ou mesmo exigir esse tipo de diferenciação.

Se um processo pai não executou o comando wait para colher zumbis pelos quais ele é responsável, talvez seja possível forçar o problema. Isso geralmente é feito através do comando kill e enviando o sinal SIGCHLD para o processo pai. Se tudo estiver funcionando corretamente, um processo pai que recebe esse sinal deve colher seus filhos zumbis para que seus IDs e posições na tabela de processos possam ser reutilizados.

Sob certas circunstâncias, um processo pai pode ignorar o sinal SIGCHLD. Se isso ocorrer e o operador ainda desejar que a tabela de processos seja limpa, o processo pai poderá ser interrompido. Quaisquer zumbis criados pelo processo pai serão atribuídos como filhos ao processo init. Como o init inicia periodicamente o comando wait em seus filhos, quaisquer zumbis pelos quais ele é responsável serão eventualmente removidos da tabela de processos.