it-swarm-pt.tech

O que é um processo de zumbi e como eu o mato?

Espingardas virtuais?

38
jldugger

Oh Deus! Não não não. Não use kill -9.

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

  1. desligar conexões de soquete

  2. limpar arquivos temporários

  3. informar seus filhos que está indo embora

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

Geralmente, envie 15 e aguarde um ou dois segundos e, se isso não funcionar, envie 2 e, se isso não funcionar, envie 1. Se isso não funcionar, REMOVA O BINÁRIO, pois o programa está se comportando mal!

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

17
Severe_admin

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

Você não deve se preocupar com eles. Eles não ocupam nenhum recurso, desaparecem quando o pai chama wait() quando o pai morre.

20
vartec

Já existe uma resposta aceita: você PODE matar o processo de 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 tenha PID = 200

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
11
ondra

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

Aquialgunsconselhos sobre como se livrar deles.

10
nedm

Um processo zumbi não possui recursos alocados, exceto a entrada na árvore de processos. Isso acontece quando um processo é concluído, no entanto, o processo pai ainda não o colhe, (ou seja, waited nele).

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

Você as verá frequentemente por curtos períodos de tempo (por exemplo, enquanto visualiza a árvore de processos usando top) - isso é normal; No intervalo de tempo entre o tempo que um processo filho é concluído e os pais pesquisam por ele - o processo filho aparecerá como um zumbi.

No entanto, se você observar processos zumbis que existem continuamente - o que não é normal - ainda não há motivo para preocupação - novamente, pois não há recursos alocados para um processo inoperante - geralmente significa que o aplicativo foi mal escrito por desenvolvedores ruins.

O único momento em que você deve se preocupar com os processos zumbis é quando você vê muitos deles, por exemplo, se o mesmo aplicativo ruim mencionado acima for colocado sob carga.

Temos muitos desenvolvedores de baixa qualidade onde trabalho, e por isso tenho o privilégio de lidar com esses problemas e aprender todo tipo de coisas inúteis enquanto o faço. De fato - minha equipe costuma recorrer aos scripts ruins do Shell, escritos por desenvolvedores ruins em entrevistas - se o candidato puder entender que o script é realmente louco e nos dizer por que é ruim, ele tem um bom pé na porta.

8
Xerxes

Quanto à espingarda virtual ...

 $ shoot <pid> 
 #!/bin/sh 
 vítima = `ps -e -o pid, ppid | egrep "^\s * $ 1\b" | awk '{print $ 2}' '
 vítima\_nome = `ps -e -o pid, cmd | egrep "^\s * $ {vítima}\b" | cabeça -n 1 | awk '{print $ 2}' `
 # kill $ {vítima} 
 eco" Matou $ {nome_da_ vítima}. "

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

0
drybjed