O que é um processo zumbi e como posso matá-lo?

36

Espingardas Virtuais?

    
por jldugger 27.05.2009 / 07:54

7 respostas

18

Oh, deus! Não não não. Não use kill -9.

Não dá ao processo uma chance de limpar:

  1. encerre as conexões de soquete

  2. limpe arquivos temporários

  3. informe seus filhos que está indo embora

  4. redefine suas características de terminal e assim por diante e assim por diante.

Geralmente, envie 15, e espere um segundo ou dois, e se isso não funcionar, envie 2, e se isso não funcionar, envie 1. Se isso não acontecer, REMOVA O BINÁRIO porque o programa é mal comportado!

Não use kill -9. Não traga a ceifeira-debulhadora apenas para arrumar o vaso de flores.

    
por 27.05.2009 / 08:34
18

Processo zumbi (na verdade, agora eles são chamados <defunct> ) não é realmente um processo. É apenas uma entrada na tabela de processos, então o processo pai pode fazer wait() syscall .

Você não deve se preocupar com eles. Eles não ocupam recursos, eles desaparecem quando seus pais chamam wait() quando o próprio pai morre.

    
por 27.05.2009 / 10:46
9

É um processo que foi completamente desalocado, mas ainda existe na tabela de processos. Contraste isso com um processo órfão, cujo pai morreu, mas ainda está em execução.

Aqui está alguns conselhos sobre como se livrar deles.

    
por 27.05.2009 / 08:00
8

Um processo de zumbi não tem recursos alocados a ele, além da entrada na árvore de processos. Isso acontece quando um processo é concluído, no entanto, o processo pai ainda não o colheu , (por exemplo, wait ed sobre ele).

Você pode tentar forçar o pai a fazer isso, se quiser, enviando um SIGCHLD ( kill -20 ) para o pai, mas não há garantia de que o pai o honrará.

Você geralmente os verá por curtos períodos de tempo (por exemplo, ao visualizar a árvore de processos usando o topo) - isso é normal; No intervalo de tempo entre a hora em que um processo filho é concluído e o pai faz a pesquisa - o processo filho aparecerá como um zumbi.

Se você ver processos zumbis que existem continuamente - o que não é normal - ainda não há necessidade de se preocupar - novamente, como não há recursos alocados para um processo morto - geralmente significa que o aplicativo está mal escrito por crappy desenvolvedores.

A única vez que você deve se preocupar com processos zumbis, é quando você vê muitos e muitos deles, por exemplo, se o mesmo aplicativo de baixa qualidade mencionado acima é colocado sob carga.

Temos muitos desenvolvedores ruins onde eu trabalho, então tenho o privilégio de lidar com essas questões e aprender todo tipo de coisas inúteis enquanto faço isso. Na verdade - minha equipe muitas vezes recorre ao uso de scripts ruins escritos por desenvolvedores ruins em entrevistas - se o candidato pode escolher que o roteiro é de fato cravo, e nos dizer por que ele é ruim, ele tem um bom pé na porta. / p>     

por 28.05.2009 / 17:58
8

Já existe uma resposta aceita: você pode matar o processo zumbi. Anexe com o depurador ao processo pai e chame a função waitpid. Por exemplo.: - vamos supor que o pai tenha PID = 100, o processo zumbi tem PID = 200

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
    
por 11.01.2010 / 14:28
0

Quanto à espingarda virtual ...

$ shoot <pid>
#!/bin/sh
victim='ps -e -o pid,ppid | egrep "^\s*$1\b" | awk '{print $2}''
victim\_name='ps -e -o pid,cmd | egrep "^\s*${victim}\b" | head -n 1 | awk '{print $2}''
#kill ${victim}
echo "Killed ${victim_name}."

E lembre-se: sempre atire na cabeça deles.

    
por 01.06.2009 / 14:33
-1

Um processo zumbi é um processo que terminou a execução, mas ainda está listado na tabela de processos.

kill -9 [pai process_name] irá eliminá-lo, com extremo preconceito.

    
por 27.05.2009 / 07:58