Programas mal escritos ou com desempenho ruim podem deixar processos zumbis à espreita dentro de seu computador Linux. Descubra como os zumbis são criados e como você pode finalmente colocá-los para descansar.
Índice
O Linux, é claro, precisa controlar todos os aplicativos e daemons em execução no seu computador. Uma das maneiras de fazer isso é mantendo a tabela de processos. Esta é uma lista de estruturas na memória do kernel. Cada processo possui uma entrada nesta lista que contém algumas informações sobre ele.
Não há muito em cada uma das estruturas da tabela de processos. Eles contêm o ID do processo , alguns outros itens de dados e um ponteiro para o bloco de controle do processo (PCB) desse processo.
É o PCB que contém os muitos detalhes que o Linux precisa procurar ou configurar para cada processo. O PCB também é atualizado conforme um processo é criado, dado o tempo de processamento e finalmente destruído.
O Linux PCB contém mais de 95 campos. É definido como uma estrutura chamada task_struct.h
e tem mais de 700 linhas. O PCB contém os seguintes tipos de informações:
O “Estado do Processo” pode ser qualquer um dos seguintes:
SIGSTOP
sinal. Ele responderá apenas aos sinais SIGKILL
ou SIGCONT
, que interrompem o processo ou o instruem a continuar, respectivamente. Isso é o que acontece quando você troca do primeiro plano ( fg
) para o segundo plano (bg)
tarefas.EXIT_ZOMBIE
e seu processo pai é notificado (pelo SIGCHLD
sinal) de que o processo filho foi concluído.
No estado Zumbi, o processo pai chama uma das wait()
famílias de funções quando o processo filho é criado. Em seguida, aguarda uma mudança de estado no processo filho. O processo filho foi interrompido, continuado ou eliminado por um sinal? Terminou executando através da conclusão natural de seu código?
Se a mudança de estado significar que o processo filho parou de funcionar, seu código de saída será lido. Em seguida, o PCB da criança é destruído e sua entrada na tabela de processos é removida. Idealmente, tudo isso acontece em um piscar de olhos, e os processos no estado zumbi não existem por muito tempo.
Um processo pai mal escrito pode não chamar a wait()
função quando o processo filho é criado. Isso significa que nada está observando as mudanças de estado no processo filho e o SIGCHLD
sinal será ignorado. Ou talvez outro aplicativo esteja afetando a execução do processo pai, seja devido a uma programação ruim ou intenção maliciosa.
No entanto, se o processo pai não estiver observando as mudanças de estado no processo filho, a manutenção adequada do sistema não ocorrerá. O PCB e a entrada na tabela de processos não serão removidos quando o processo filho terminar. Isso faz com que o estado zumbi nunca seja removido do PCB.
Os zumbis usam um pouco de memória, mas geralmente não representam um problema. A entrada na tabela de processos é pequena, mas, até que seja liberada, o ID do processo não pode ser reutilizado. Em um sistema operacional de 64 bits, é improvável que cause problemas porque o PCB é muito maior do que a entrada da tabela de processos.
Um grande número de zumbis pode, possivelmente, afetar a quantidade de memória que está livre para outros processos. Se você tem tantos zumbis, no entanto, você tem um problema sério com o aplicativo pai ou um bug do sistema operacional.
Você não pode matar um processo zumbi porque ele já está morto. Ele não responderá a nenhum sinal porque foi removido da memória – não há para onde enviar um SIGKILL
sinal. Você pode tentar enviar o SIGCHLD
sinal para o processo pai, mas se não funcionou quando o processo filho terminou, também é improvável que funcione agora.
A única solução confiável é eliminar o processo pai. Quando é finalizado, seus processos filhos são herdados pelo init
processo, que é o primeiro processo a ser executado em um sistema Linux (seu ID de processo é 1).
O init
processo realiza regularmente a limpeza necessária dos zumbis, portanto, para matá-los, basta matar o processo que os criou. O top
comando é uma maneira conveniente de ver se você tem zumbis.
Digite o seguinte:
topo
Este sistema possui oito processos zumbis. Podemos listá-los usando o ps
comando e direcionando-o para egrep
. Novamente, os processos zumbis têm um sinalizador de estado de “Z” e normalmente você também verá “extinto”.
Digite o seguinte:
ps aux | egrep "Z | extinto"
Os processos zumbis são listados.
Esta é uma maneira mais simples de descobrir os IDs de processos de zumbis do que rolar para frente e para trás top
. Também vemos que um aplicativo chamado “badprg” gerou esses zumbis.
O ID do processo do primeiro zumbi é 7641, mas precisamos encontrar o ID do processo de seu processo pai. Podemos fazer isso usando
novamente. Usaremos a opção de saída ( ps
-o
) para informar ps
a exibição apenas do ID de processo do pai e, em seguida, passá-lo com o ppid=
sinalizador.
O processo que queremos encontrar será indicado usando a -p
opção (processo) e, em seguida, passando o ID do processo do zumbi.
Portanto, digitamos o seguinte comando para pesquisar as informações do processo para o processo 7641, mas ele reportará apenas o ID do processo pai:
ps -o ppid = -p 7641
Disseram que o ID do processo pai é 7636. Agora podemos fazer uma referência cruzada usando ps
mais uma vez.
Vemos que corresponde ao nome do processo pai anterior. Para encerrar o processo pai, use a opção SIGKILL com o comando kill da seguinte maneira:
kill -SIGKILL 7636
Dependendo do proprietário do processo pai, você também pode precisar usar sudo
.
… A menos que eles estejam em uma horda enorme. Alguns não são nada com que se preocupar e uma simples reinicialização os eliminará.
No entanto, se você perceber que um aplicativo ou processo está sempre gerando zumbis, é algo que você deve examinar. É mais provável que seja apenas um programa escrito de maneira descuidada; nesse caso, talvez haja uma versão atualizada que seja devidamente limpa após seus processos filho.
Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…
Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…
A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…
A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…
O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…
Para ver suas fotos mais de perto ou para uma edição precisa , você pode…