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


Respostas:


17

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.


13
kill -9 não mata zumbis. Você tem que matar o pai deles, olhe pstree.
LapTop006 27/05/09

3
@ LapTop006: Nesse caso, eles são mais parecidos com vampiros; mate o vampiro chefe para parar a invasão.
Amphetamachine

2
Esta resposta está errada em quase todos os aspectos. O processo está completo; ele já desligou suas conexões, limpou arquivos temporários, etc. etc. Não existe mais um processo real, apenas uma entrada na tabela de processos. Não remova o binário filho - ele não está se comportando mal. Significa apenas que os pais ainda não realizaram um funeral adequado para o filho.
21718 Ken Williams

19

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

Você não deve se preocupar com eles. Eles não ocupam nenhum recurso, desaparecem quando o pai ou a mãe chama wait()quando o próprio pai morre.



9

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

Interessante. Vou tentar isso.
precisa saber é

8

Um processo zumbi não possui recursos alocados, exceto a entrada na árvore de processos. Isso acontece quando um processo é concluído, mas o processo pai ainda não o colheu (ou seja, foi waiteditado).

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

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 o pai faz uma pesquisa para 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 de baixa qualidade escritos por desenvolvedores de baixa qualidade em entrevistas - se o candidato puder escolher que o script é realmente louco e nos dizer por que é ruim, ele tem um bom pé na porta.


0

Quanto à espingarda virtual ...

$ shoot <pid>
#! / bin / sh
vítima = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' '
vítima \ _name = `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.


Sinto muito, mas, para constar, esse script tem um erro de digitação "nome_da_ vítima" e vai matar o pai do PID dado em US $ 1, em qualquer caso, considera se o PID é o único zumbi ou se ele tem alguns irmãos, apenas mata o pai e com isso toda a família perecerá.
Marc Riera

-1

Um processo zumbi é um processo que terminou de executar, mas ainda está listado na tabela de processos.

kill -9 [parent process_name] irá colocá-lo para baixo, com extremo preconceito.


O kill -9 não mata um processo de zumbi - essa é uma das razões pelas quais eles são chamados de zumbis. Um "processo" de zumbi não desaparecerá até que seu código de retorno seja colhido por um processo pai.
Mei

3
Não, kill -9 em PRECURSOR vai matar o pai, fazendo com que o init-lo do pai, que vai colher o código de retorno da criança.
Alan
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.