Devo matar o processo de zumbi no meu sistema?

20

Como sou novato em sistemas Linux / Unix e acabei de ler sobre processos zumbis , tenho uma pergunta. Eu tenho 10 deles agora. Preciso matá-los e, se sim, por quê? Eles são uma carga no meu sistema?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
Jason Paddle
fonte
25
Não há necessidade de matá-los. Eles já estão mortos.
27612 Marco Marco
2
Então eles não carregam mais o meu sistema. E eles permanecerão assim até que eu reinicie o sistema ou os mate, certo?
21812 Jason Paddle
7
@Marco: Você não pode matar o que já está morto. Mas você pode matar seus pais, harrharr!
Wullxz
7
O problema é que seus pais não os colheram (quando morreram).
ypercubeᵀᴹ
3
10 zumbis ??? Você está infestado! Corra Jason corra.
Luc M

Respostas:

29

Você não pode matar um zumbi, ele já está morto.

Os recursos desse processo são gratuitos e disponíveis para outros processos. O que resta é uma entrada na tabela de processos. Isso não influencia o desempenho, não se preocupe.

Marco
fonte
Sim, isso faz sentido. Eu posso matar o processo dos pais. Obrigado pela informação. Eu só queria saber se eles carregam ou não têm sistema.
21412 Jason Paddle
Eu acredito que há um limite de zumbis embora. Eu acho que é 1024, então não prejudica o desempenho, mas acho que existe um limite no número que você pode ter.
ProfessionalAmateur
@ ProfessionalProfessionalAmateur O que acontece se você atingir o limite de zumbis (1024 ou o que for)?
Roddy das ervilhas congeladas
@RoddyoftheFrozenPeas - Para ser sincero, não tenho certeza, sempre os limpei antes de chegar a esse ponto. Eu imagino que o sistema tentará criar outro zumbi e talvez tenha uma violação de memória ou algum outro erro grave, estouro ou falha de segmentação de algum tipo.
ProfessionalAmateur
2
@ ProfessionalAmateur: Não há limite de zumbis no linux. Os PIDs de zumbis estão sujeitos a /proc/sys/kernel/pid_max, assim como qualquer outro PID.
rsaw
16

Quais são esses processos zumbis que aparecem no ps? Eu os mato, mas eles não vão embora!

Zumbis são processos mortos. Você não pode matar os mortos. Todos os processos acabam morrendo e, quando o fazem, tornam-se zumbis. Eles não consomem quase nenhum recurso, o que é esperado, porque estão mortos! O motivo dos zumbis é que o pai (processo) do zumbi pode recuperar o status de saída do zumbi e as estatísticas de uso de recursos. O pai sinaliza ao sistema operacional que ele não precisa mais do zumbi usando uma das chamadas do sistema wait ().

Quando um processo morre, todos os processos filhos se tornam filhos do processo número 1, que é o processo init. Init está sempre esperando que as crianças morram, para que elas não permaneçam como zumbis.

Se você tiver processos zumbis, significa que esses zumbis não foram esperados pelos pais (veja o PPID exibido por ps -l). Você tem três opções: Corrija o processo pai (espere); matar os pais; ou viver com isso. Lembre-se de que viver com isso não é tão difícil, porque os zumbis ocupam pouco mais de uma linha extra na saída do ps.

Fonte: http://www.linuxsa.org.au/tips/zombies.html

E no caso de você estar em uma onda de assassinatos, esse segmento de superusuário pode ser interessante para você: como você encontra o processo pai de um processo de zumbi?

wullxz
fonte
Observe que corrigir o pai pode ser um exagero - talvez ainda não chegue ao ponto de esperar pelos filhos. Talvez faça isso mais tarde (ou sim, talvez não).
Romain
sim, você está certo. A resposta da pergunta que eu vinculei informa como determinar o processo pai. Portanto, você sempre tem a chance de verificar quais processos criam os zumbis e decidir se é necessário mantê-lo em execução.
Wullxz
7

Você não precisa matá-los.

Para construir um entendimento básico:

Todo processo é filho de um processo pai (exceto o processo init, mas não precisamos nos preocupar com isso).

Quando um processo filho termina a execução, ele ainda pode conter dados que o processo pai deseja acessar, geralmente um código de saída que descreve o resultado do processo filho (foi bem-sucedido? Ocorreu um erro? Qual era o código de erro?).

Um processo filho final fica na tabela de processos como um processo zumbi até que o processo pai "colha" ou aguarda o processo filho, que é simplesmente o processo pai informando ao sistema operacional que ele não precisa mais desse processo filho; Ele leu todos os valores de retorno que deseja e é feito com ele. Nesse ponto, o sistema limpará a entrada na tabela de processos.

Darth Android
fonte
3

Este processo não precisa ser morto.

Apenas no caso de você querer matá-lo de qualquer maneira (por qualquer motivo), certifique-se de atirar na cabeça, aqui está um comando útil:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

De https://www.erianna.com/kill-a-linux-zombie-process

Datageek
fonte
1
+1 para shoot at the head.
BenjiWiebe