(SO: variante Debian.)
Ter um processo com status de zumbi. O PPid
pertencia a um gvim
processo. O conteúdo de /proc/[pid]/wchan
édo_exit
,
/comm
está sh
e /cmdline
está vazio, /status
é mostrado abaixo.
Isso poderia ser um bug gvim
? Da entrada da Wikipedia emProcesso zumbiEu li que um programa pode rejeitar voluntariamente a chamada, wait
mas isso foi para uma
gvim
sessão que estava inativa há algum tempo. Fechei o gvim
processo – mas o zumbi ainda está à espreita. Isso poderia indicar um bug do sistema operacional?
Novamente da Wikipedia:
Se o programa pai não estiver mais em execução, os processos zumbis normalmente indicam um bug no sistema operacional.
E com que frequência colhe init
processos abandonados? Já se passaram pelo menos 60 minutos desde gvim
o falecimento, mas ainda está lá.
Por outro lado, poderia ser sh
e não gvim
?
O/status
arquivoestados SigQ
de zero.
$ less /proc/30339/status
Name : sh
State : Z (zombie)
Tgid : 30339
Pid : 30339
PPid : 29673
TracerPid: 0
Uid : 1000 1000 1000 1000
Gid : 1000 1000 1000 1000
FDSize : 0
Groups : 4 7 20 24 27 29 30 46 107 124 127 1000
Threads : 1
SigQ : 0/30658
SigPnd : 0000000000000000
ShdPnd : 0000000000000000
SigBlk : 0000000000000000
SigIgn : 0000000000003001
SigCgt : 0000000000010002
CapInh : 0000000000000000
CapPrm : 0000000000000000
CapEff : 0000000000000000
CapBnd : ffffffffffffffff
Cpus_allowed : 3
Cpus_allowed_list: 0-1
Mems_allowed : 1
Mems_allowed_list: 0
voluntary_ctxt_switches : 2
nonvoluntary_ctxt_switches: 3
Não que isso destrua meu sono de beleza, mas me pergunto…
Responder1
Ver zumbis tende a indicar um bug no processo que os gerou: esse processo deve colher os zumbis (chamando wait
) ou ignorar explicitamente SIGCLD
(ou definir o SA_NOCLDWAIT
sinalizador).
No entanto, este é um bug menor. Os processos zumbis consomem apenas uma entrada na tabela de processos, o que representa uma quantidade insignificante de recursos. O problema só se torna significativo se um processo deixar milhares de zumbis para trás.
Você não matou o processo pai do zumbi: caso contrário, o zumbi teria ido embora. O processo 29673 (o pai do zumbi) ainda está vivo e funcionando (mas não wait
funcionando). Ou este não é o Gvim, mas algum subprocesso dele, ou você fechou uma janela do Gvim, mas o programa ainda está em execução. Corre ps l 29673
para ver como é esse processo.
Responder2
Se você encontrar continuamente um processo zumbi, estou inclinado a pensar que definitivamente há algo errado. O processo zumbi ocorre. Geralmente vejo alguns por mês nos vários sistemas que mantenho no trabalho e em casa.
Geralmente, eles podem ser atribuídos a um erro do operador ou a um problema com um software específico. As reinicializações geralmente os resolvem e normalmente não ocorrem novamente por algum tempo.
Se eles estiverem incomodando você, você pode tentar anexar ao ID do processo pai (PPID) deles gdb
para ver o que está acontecendo ou até mesmo tentar matá-los:
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
Se você quiser, eu leria esses recursos adicionais abaixo para obter outras técnicas para tentar lidar com eles.
Referências
Responder3
Isso acontece toda vez que você usa o gvim? O gvim funciona além de deixar um zumbi depois de sair? A menos que cause problemas reais, eu simplesmente ignoraria - os zumbis não sobrecarregam os recursos do sistema. Eu não ficaria surpreso se fosse um bug no gvim - ou talvez no gtk, mas a menos que o programa não funcione, eu o ignoraria.
Um processo zumbi/extinto normalmente acontece quando um processo filho é encerrado antes que o pai comece a ouvi-lo. A criança "fica por perto" porque não havia nenhum programa disponível para receber seu status de saída, mesmo que tenha sido encerrado de forma satisfatória - portanto, ela se torna um zumbi. Outra razão pela qual você pega zumbis pode ser quando uma grande árvore de processos desmorona - talvez porque alguém tentou matar um ou mais processos na árvore.
Um zumbi é na verdade uma forma de o sistema operacional manter o status de saída e outras informações sobre um processo que não foi encerrado corretamente, caso alguém esteja interessado. Além de uma entrada na tabela de processos, um zumbi não ocupa nenhum recurso (ou seja, nenhuma memória ou CPU).
IMHO WikiPedia está errada - ou pelo menos fácil de entender mal - quando afirma que zumbis não colhidos significam um erro no sistema operacional se permanecerem após o processo principal ter sido gerado pelas saídas. Não é incomum que um zumbi sobreviva aos pais e, nesse caso, é adotado por init
(PID 1). init
pode eventualmente colher, mas alguns zumbis - mesmo aqueles adotados pelo init - podem muito bem permanecer até a reinicialização. Contanto que você não tenha tantos zumbis que preencham a tabela de processos, eles dificilmente serão um problema.
É claro que os zumbis geralmente significam que algo está errado - que um programa gera um filho que morre antes que os pais esperassem - mas não precisa ser o sistema operacional o problema. Certamente podem ser os componentes do sistema operacional que causam isso - por exemplo. um servidor de som ausente ou mal configurado faz com que um processo filho que deveria manipular o som para um programa saia imediatamente, permanecendo assim como zumbis.
Responder4
Como sempre - depende. A maioria das ferramentas de monitoramento fica amarela ou vermelha se encontrar mais do que um certo número de processos zumbis.
Então, basicamente - sim - normalmente é um sinal de problema.
Mas já vi programas que geram processos zumbis como parte de suas operações "normais". Esses processos zumbis desapareceram quando a API de nível superior correspondente (não digo processo pai aqui) foi chamada com o comando "quit/exit".
Então nesses casos parece que o aplicativo cuidou (e talvez precisasse) desses zumbis. Então para monitoramento tive que definir uma exceção nos servidores onde essas aplicações estavam rodando.
Em outros casos, os zumbis desapareceram após um curto período de tempo - então você pode ter certos estados de sistema não persistentes com processos zumbis.
No seu caso: Se gvim
isso for feito, não deverá sobrar nenhum zumbi - provavelmente um bug.