O que são processos zumbis?


138

Com comandos como tope baseados em GUI System Monitor, posso ver que no momento tenho vários processos zumbis.

O que são processos zumbis?

Eles afetam o desempenho do sistema ou o aplicativo para o qual são zumbis. Eles usam muita memória ou alguma memória?


39
São processos que querem comer a sua cpu;)
Luis Alvarado

8
para o almoço ... :)
RolandiXor

3
Esses processos estão mortos, mas não enterrados.
Prateek Joshi

2
Coma minha CPU ?! Isso é realmente assustador!
Håvard Geithus

Respostas:


162

Zumbis são processos mortos. Eles não podem ser 'matar' (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.

Os zumbis podem ser identificados na saída do comando ps do Unix pela presença de um "Z" na coluna STAT. Os zumbis que existem por mais de um curto período de tempo geralmente indicam um erro no programa pai. Como em outros vazamentos, a presença de alguns zumbis não é preocupante por si só, mas pode indicar um problema que se tornaria sério sob cargas mais pesadas.

Para remover zumbis de um sistema, o sinal SIGCHLD pode ser enviado aos pais manualmente, usando o comando kill. Se o processo pai ainda se recusar a colher o zumbi, o próximo passo seria remover o processo pai. Quando um processo perde seu pai, o init se torna seu novo pai. O Init executa periodicamente a chamada do sistema de espera para colher quaisquer zumbis com o init como pai.

Também existem processos órfãos que são um processo de computador cujo processo pai foi finalizado ou finalizado.

Um processo pode ficar órfão durante a chamada remota quando o processo do cliente falha após fazer uma solicitação do servidor.

Órfãos desperdiçam recursos do servidor e podem potencialmente deixar um servidor com problemas (esta é a maior diferença de recursos entre zumbis e órfãos (exceto se você assistir a um filme sobre zumbis órfãos). No entanto, existem várias soluções para o problema do processo órfão:

  1. O extermínio é a técnica mais usada; neste caso, o processo órfão é morto.

  2. Reencarnação é uma técnica na qual as máquinas tentam periodicamente localizar os pais de quaisquer cálculos remotos; momento em que os processos órfãos são mortos.

  3. A expiração é uma técnica em que cada processo recebe uma certa quantidade de tempo para concluir antes de ser morto. Se necessário, um processo pode "pedir" mais tempo para terminar antes que o tempo alocado expire.

Um processo também pode ficar órfão em execução na mesma máquina que seu processo pai. Em um sistema operacional semelhante ao UNIX, qualquer processo órfão será imediatamente adotado pelo processo especial do sistema "init". Esta operação é chamada re-parentalidade e ocorre automaticamente. Embora tecnicamente o processo tenha o processo "init" como pai, ele ainda é chamado de processo órfão, pois o processo que o criou originalmente não existe mais.

Mais informações:

http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU

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

http://www.brighthub.com/computing/linux/articles/79186.aspx

Como identificar e eliminar o processo de interrupção, quando o sistema trava e reage lentamente na entrada do usuário?

Matando um processo em execução em uma máquina Ubuntu remotamente a partir de uma máquina Windows que esteja na LAN


18
Ekhm! Você pode matar os mortos! Você apenas tem que apontar para a cabeça. Ou eles mentiram para nós o tempo todo?
Marcin Kaminski

1
initapela waita todos os seus processos filhos: zumbi, órfão (adotado) e biológico (auto-gerado)?
Bleeding Fingers

1
acc. para a Segunda Guerra Mundial usar camuflagem: P
#

Por favor, dê uma medalha para @MarcinKaminski!
Andrea

20

Os processos zumbis (também mostrados como <defunct>) não são processos reais. Eles são apenas entradas na tabela de processo do kernel. Este é o único recurso que eles consomem. Eles não consomem CPU ou RAM. O único perigo de ter zumbis está ficando sem espaço na tabela de processos (você pode usar cat /proc/sys/kernel/threads-maxpara ver quantas entradas são permitidas no seu sistema).

Eles aparecem apenas quando o processo pai (ou seja, processo que fork()'edeles) está ativo, mas ainda não chamaram a wait()função do sistema. Uma vez que pai morre, os zumbis são wait()'edpelo inite desaparecer.


4
A topimagem ` nesta pergunta parece contradizê-lo? Lá, o zumbi parece usar 100% de 1 CPU, mas não há memória.
Torben Gundtofte-Bruun

7

Quando um child processtermina, sua morte é comunicada aos pais, para que os pais possam tomar as medidas apropriadas.

Um processque está aguardando que seu pai aceite o código de retorno é chamado de processo zumbi .

Eles têm, completed their executionmas ainda tem um entryno process table.


1

Processos zumbis são processos que pararam de executar, mas a entrada da tabela de processos ainda existe porque o processo pai não o recuperou por meio do sistema de espera. Tecnicamente, cada processo que termina é um zumbi por um período muito curto, mas eles podem viver por mais tempo.

Os processos zumbis de vida mais longa ocorrem quando os processos pai não chamam o syscall de espera após a conclusão do processo filho. Uma situação em que isso ocorre é quando o processo pai é mal gravado e simplesmente omite a chamada de espera ou quando o processo pai morre antes do filho e o novo processo pai não chama a espera. Quando o pai de um processo morre antes do filho, o SO atribui o processo filho ao processo "init" ou PID 1. Ou seja, o processo init "adota" o processo filho e se torna seu pai. Isso significa que agora, quando o processo filho sai, o novo pai (init) deve chamar wait para obter seu código de saída ou sua entrada na tabela de processos permanece para sempre e se torna um zumbi

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.