20Aug

O que é um "processo zombi" no Linux?

click fraud protection

Se você é um usuário do Linux, você pode ter visto processos de zumbis em busca da sua lista de processos. Você não pode matar um processo zumbi porque já está morto - como um zumbi real.

Os zumbis são basicamente os fragmentos restantes de processos mortos que não foram limpos corretamente. Um programa que cria processos zumbis não está programado corretamente - os programas não devem permitir que os processos zumbis permaneçam.

Crédito da imagem: Daniel Hollister no Flickr( Remixed)

O que é um processo de zombi?

Para entender o que é um processo zumbi e o que faz com que os processos zumbis apareçam, você precisará entender um pouco sobre como os processos funcionam no Linux.

Quando um processo morre no Linux, não é tudo removido da memória imediatamente - o descritor do processo permanece na memória( o descritor do processo só leva uma pequena quantidade de memória).O status do processo torna-se EXIT_ZOMBIE e o pai do processo é notificado de que seu processo filho faleceu com o sinal SIGCHLD.O processo pai então deve executar a chamada do sistema wait() para ler o status de saída do processo morto e outras informações. Isso permite que o processo pai obtenha informações do processo morto. Depois de esperar() , o processo zumbi é completamente removido da memória.

instagram viewer

Isso geralmente acontece muito rapidamente, então você não verá processos de zumbis acumulados em seu sistema. No entanto, se um processo pai não estiver programado corretamente e nunca chama wait() , seus filhos zumbis ficarão na memória até serem limpos.

Utilitários como o GNOME System Monitor, o superior comando e ps comando exibir processos zumbi.

Perigos de Processos Zombie

Os processos Zombie não utilizam nenhum recurso do sistema.(Na verdade, cada um usa uma quantidade muito pequena de memória do sistema para armazenar seu descritor de processo.) No entanto, cada processo zumbi mantém seu ID de processo( PID).Os sistemas Linux possuem um número finito de IDs de processo - 32767 por padrão em sistemas de 32 bits. Se os zumbis estiverem se acumulando a uma taxa muito rápida - por exemplo, se o software de servidor incorretamente programado estiver criando processos zumbis sob carga - todo o conjunto de PIDs disponíveis acabará por ser atribuído a processos zumbis, impedindo que outros processos sejam lançados.

No entanto, alguns processos de zumbis pendurados ao redor não são problema - embora eles indiquem um erro com seu processo pai em seu sistema.

Como se livrar dos processos zombis

Você não pode matar processos zumbis, pois pode matar os processos normais com o sinal SIGKILL - os processos zumbis já estão mortos. Tenha em mente que você não precisa se livrar dos processos zumbis, a menos que você tenha uma grande quantidade em seu sistema - alguns zumbis são inofensivos. No entanto, existem algumas maneiras de se livrar dos processos zumbis.

Uma maneira é enviando o sinal SIGCHLD para o processo pai. Este sinal diz ao processo pai para executar a chamada do sistema wait() e limpar seus filhos zumbis. Envie o sinal com o comando kill , substituindo pid no comando abaixo com o PID do processo pai:

kill -s SIGCHLD pid

No entanto, se o processo pai não estiver programado corretamente e estiver ignorando sinais SIGCHLD, isso ganhounão ajuda. Você terá que matar ou fechar o processo pai dos zumbis. Quando o processo que criou os zumbis termina, init herda os processos zumbis e se torna seu novo pai.(init é o primeiro processo iniciado no Linux no boot e é atribuído PID 1.) init periodicamente executa a chamada do sistema wait() para limpar seus filhos zumbis, então o init fará um breve trabalho dos zumbis. Você pode reiniciar o processo pai depois de fechá-lo.

Se um processo pai continuar a criar zumbis, ele deve ser corrigido para que ele atenda corretamente wait() para colher seus filhos zumbis. Arquiva um relatório de erro se um programa em seu sistema continuar criando zumbis.