Como o Linux lida com o processo zumbi

11

Os processos zumbis são criados em sistemas Unix / Linux. Podemos removê-los por meio do comando kill .

Mas existe algum mecanismo de limpeza embutido no Linux para lidar com processos zumbis?

    
por atur 20.08.2014 / 14:57

4 respostas

18

Processos de zumbis já estão mortos. Você não pode matá-los. O comando kill ou a chamada do sistema não tem efeito em um processo zumbi. (Você pode fazer um zumbi acabar com kill , mas você tem que atirar no pai, não no zumbi, como veremos em um minuto).

Um processo de zumbi não é realmente um processo, é apenas uma entrada na tabela de processos. Não há outros recursos associados ao processo de zumbis: ele não tem nenhuma memória ou código em execução, ele não mantém nenhum arquivo aberto, etc.

Quando um processo morre, a última coisa a seguir, depois que todos os outros recursos são limpos, é a entrada na tabela de processos. Esta 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 uma das wait família de syscalls; Neste ponto, o zumbi desaparece. Chamando wait é dito para colher a criança, ampliando a metáfora de um zumbi sendo morto mas de alguma forma ainda não totalmente processado para a vida após a morte. O pai também pode indicar que não se importa (ignorando o sinal SIGCHLD ou ligando para sigaction com o SA_NOCLDWAIT flag), caso em que a entrada na tabela de processos é excluída imediatamente quando a criança morre.

Assim, um zumbi só existe quando um processo morreu e seu pai não chamou wait ainda. Esse estado pode durar apenas enquanto o pai ainda estiver em execução. Se o pai morre antes da criança ou morre sem ler o status da criança, o processo pai do zumbi é definido como o processo com o PID 1, que é init . Um dos trabalhos de init é chamar wait em um loop e, assim, colher qualquer processo de zumbi deixado pelo pai.

    
por 20.08.2014 / 15:31
6

Você não é kill de um processo de zumbi, pois já está morto.

Processos zumbis têm que ser wait ed por seus pais, para que seu status de saída seja coletado.

O único "mecanismo de limpeza embutido" 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 processo init , que irá wait no filho, coletará seu status de saída e removerá sua entrada na tabela de processos.

    
por 20.08.2014 / 15:18
3

Assim que o pai de um processo morre, o processo se torna órfão - desconsiderando se é um zumbi ou não. O que acontece com os órfãos? Eles recebem um novo pai, chamado init . init irá wait em cada órfão que coletou, assim colhendo o órfão (que também pode ter sido um zumbi também).

    
por 20.08.2014 / 15:24
1

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é lá, o sistema operacional os mantém para retornar o status de saída para o pai.

    
por 20.08.2014 / 15:16