Respostas:
Os processos zumbis já estão mortos. Você não pode matá-los. A kill
chamada de comando ou sistema não tem efeito em um processo zumbi. (Você pode fazer com que um zumbi vá embora kill
, mas você precisa atirar no pai, não no zumbi, como veremos em um minuto.)
Um processo zumbi não é realmente um processo, é apenas uma entrada na tabela de processos. Não há outros recursos associados ao processo zombie: ele não possui memória ou código em execução, não mantém arquivos abertos, etc.
Quando um processo morre, a última coisa a ser executada, após a limpeza de todos os outros recursos, é a entrada na tabela de processos. Essa entrada é mantida, formando um zumbi, para permitir que o processo pai rastreie o status de saída da criança. O pai lê o status de saída chamando um wait
dos membros da família de syscalls; neste ponto, o zumbi desaparece. Chamando wait
é dito para colher a criança, estendendo a metáfora de um zumbi estar morto, mas de alguma forma ainda não totalmente transformado em vida após a morte. O pai também pode indicar que não se importa (ignorando o sinal SIGCHLD ou chamando sigaction
com o SA_NOCLDWAIT
sinalizador); nesse caso, a entrada na tabela de processos é excluída imediatamente quando a criança morre.
Assim, um zumbi só existe quando um processo morre e seu pai ainda não ligou wait
. Esse estado pode durar apenas enquanto o pai ainda estiver em execução. Se o pai morre antes do filho ou morre sem ler o status do filho, o processo pai do zumbi é definido como PID 1, que é init
. Um dos trabalhos de init
é chamar wait
em loop e, assim, colher qualquer processo de zumbi deixado para trás por seu pai.
Você não faz kill
um processo de zumbi, pois já está morto.
Os processos zumbis precisam ser wait
editados por seus pais, para que seu status de saída seja coletado.
O único "mecanismo de limpeza interno" existente no Linux funciona para o caso de qualquer processo pai morrer antes de coletar o status de saída de seus filhos. Nesse caso, cada filho é herdado pelo init
processo, que wait
coletará seu status de saída e removerá sua entrada na tabela de processos.
Assim que o pai de um processo morre, o processo se torna órfão - independentemente de ser um zumbi ou não. O que acontece com os órfãos? Eles recebem um novo pai, chamado init
. init
será wait
em cada órfão que ele coletou, colhendo o órfão (que também pode ter sido um zumbi).
Não, não há mecanismo de limpeza embutido para zumbis. Os zumbis vão para o céu dos zumbis quando seus pais são mortos. Até então, o sistema operacional os mantém para retornar o status de saída ao pai.
init
não mata nenhum processo. Cabe apenaswait
a seus filhos coletar seu status.