Como o linux lida com o processo zumbi

12

Os processos zumbis são criados em sistemas Unix / Linux. Podemos removê-los através do killcomando

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

Atur
fonte

Respostas:

18

Os processos zumbis já estão mortos. Você não pode matá-los. A killchamada 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 waitdos 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 sigactioncom o SA_NOCLDWAITsinalizador); 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 waitem loop e, assim, colher qualquer processo de zumbi deixado para trás por seu pai.

Gilles 'SO- parar de ser mau'
fonte
6

Você não faz killum processo de zumbi, pois já está morto.

Os processos zumbis precisam ser waiteditados 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 initprocesso, que waitcoletará seu status de saída e removerá sua entrada na tabela de processos.

chrk
fonte
3

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. initserá waitem cada órfão que ele coletou, colhendo o órfão (que também pode ter sido um zumbi).

Philipp Murry
fonte
1
Não. Sendo preciso, initnão mata nenhum processo. Cabe apenas waita seus filhos coletar seu status.
chrk
1
@chrk, Philipp: o termo usual é colher .
Gilles 'SO- stop be evil' (
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é então, o sistema operacional os mantém para retornar o status de saída ao pai.

unxnut
fonte
então .. isso não tem efeito negativo da memória etc?
1
na verdade, quando o pai do dies zumbis, o initprocesso de retoma e vai chamá wait-lo
Não, todos os recursos alocados ao processo são liberados, exceto a entrada na tabela de processos.
unxnut