Aprenda Linux

Como matar processos zumbis no Linux

Como matar processos zumbis no Linux

Um processo zumbi no Linux se refere àqueles processos já mortos, mas, de uma forma ou de outra, ainda estão presentes na tabela de processos do sistema. A lacuna é que, por algum motivo, esse processo não foi limpo pelo pai da tabela de processos. Normalmente, isso acontece após a conclusão do processo de execução.

A forma usual de operação no Linux é que depois que um processo conclui sua execução, ele notifica seu pai, que é responsável por remover o processo da tabela. Infelizmente, o pai é incapaz de remover o processo da memória nos casos em que o pai não consegue ler o status do filho. É assim que temos processos mortos na tabela de processos. São o que chamamos de processos zumbis.

O que causa os processos do Linux Zombie?

Quando o processo filho é criado, um processo pai mal escrito pode falhar ao chamar a função wait (). Como resultado, seus filhos zumbis permanecerão na memória até que sejam extintos.

Isso significa que nada está monitorando o processo infantil para mudanças de estado, e o sinal SIGCHLD será ignorado. Talvez outro aplicativo esteja interferindo na execução do processo pai, seja por meio de programação ruim ou intenção maliciosa.

A manutenção adequada do sistema não ocorrerá se o processo pai não estiver observando as mudanças de estado no processo filho.

Quando o processo infantil terminar, o PCB e a entrada na tabela de processo não serão removidos. O estado de zumbi nunca é removido do PCB como resultado deste.

Os zumbis têm alguma memória, mas geralmente não é um problema. Como os sistemas Linux têm um número finito de PIDs (embora um grande número), se PIDs suficientes estiverem zumbidos, nenhum outro processo pode ser iniciado. É duvidoso que isso aconteça.

No entanto, os processos zumbis sugerem que algo deu errado com um aplicativo e que um programa específico pode ter um bug.
Bugs de software em data centers não devem ser tolerados e devem ser corrigidos.
Você deve ficar atento e destruir processos zumbis até que a falha seja corrigida.

O ID do processo não pode ser reutilizado até que seja lançado, então a entrada da tabela do processo é minúscula.
Como o PCB é muito maior do que a entrada da tabela de processos em um sistema operacional de 64 bits, é improvável que cause problemas.

A quantidade de memória disponível para outros processos pode ser afetada por um grande número de zumbis. No entanto, se você tiver tantos zumbis, terá um problema grave com o aplicativo pai ou um bug no sistema operacional.

Então, o que você faz quando um procedimento se transforma em um zumbi? Você rastreia e elimina os processos zumbis.

Como encontrar um processo zumbi?

A parada inicial para matar um processo zumbi no sistema é primeiro identificá-lo. Como o processo init limpa regularmente os zumbis, tudo que você precisa fazer para se livrar deles é destruir o processo que os criou.

O comando top é uma maneira rápida de ver se há zumbis na sua área. Para conseguir isso, vamos executar o seguinte comando.

principal

principais resultados de comando

O número de processos zumbis neste sistema será mostrado na saída. No nosso caso acima, temos 0 zumbis.
Usando o comando ps e canalizando-o para egrep, podemos obter uma lista deles. O sinalizador de estado para processos zumbis é “Z”, e às vezes você também verá “extinto”.

tuts @ fosslinux: ~ $ ps aux | egrep "Z | extinto"

O sinalizador de estado para processos zumbis é Z ou extinto

Vamos analisar as várias seções deste comando.

Z na coluna STAT da saída identifica um processo zumbi.
[extinto] na última coluna (COMMAND) da saída também identifica um processo zumbi.

Idealmente, não é possível matar um processo de zumbi porque ele está morto. Em vez disso, notificamos o pai para tentar ler o status do processo do filho e, finalmente, limpá-lo da tabela do sistema. Para acionar este processo, enviamos um sinal SIGCHLD para o pai do processo. Identificar o ID do processo pai ou o que é chamado de PID envolve a execução do seguinte comando:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identificar o ID do processo pai

Depois de obter o PID do Zumbi, use o comando SIGCHLD sinalizar para os processos pai previamente identificados.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

use o comando sinal SIGCHLD

Em alguns casos, isso não limpa o processo de zumbi. Isso nos chama a nos envolver no plano b ou c. O anterior envolve reiniciar o processo pai ou eliminar os processos pai. Por outro lado, os últimos casos envolvem fazer uma reinicialização do sistema, especialmente quando o processo Zombie pode causar uma interrupção ou um grande aumento devido ao processo Zombie.

Abaixo está o comando para matar o processo pai.

tuts @ fosslinux: ~ $ kill -9 

comando para matar o processo pai

No caso de um processo pai ser eliminado, por extensão, todos os processos filho do pai fornecido também são eliminados. No caso de um dos processos filho ser crítico em um determinado momento, você pode precisar adiar o assassinato até que seja seguro. Por outro lado, uma verificação rápida pode lhe dizer quanta memória ou poder de processamento os processos Zombie estão consumindo. Isso ajuda a determinar se a melhor opção é matar o processador pai para fazer uma reinicialização do sistema no ciclo seguinte de manutenção do sistema que já está agendada.

No Linux, como funcionam os estados dos processos?

Claro, o Linux deve manter o controle de todos os aplicativos e daemons em execução no seu computador. Manter a tabela de processos é uma das maneiras de fazer isso.
Esta é uma lista de estruturas de memória do kernel. Esta lista inclui uma entrada para cada processo que contém algumas informações sobre ele. Cada uma das estruturas da tabela de processos contém muito pouca informação.

Eles armazenam o ID do processo, algumas outras informações e um ponteiro para o bloco de controle do processo (PCB).

O PCB é onde o Linux armazena todas as informações de que precisa para pesquisar ou definir para cada processo. Conforme um processo é criado, ele é modificado, recebe o tempo de processamento e, em seguida, é destruído.

Existem mais de 95 campos no Linux PCB. É definido na estrutura da tarefa, que tem mais de 700 linhas. Os seguintes tipos de informações podem ser encontrados no PCB:

Os estados do processo são ilustrados abaixo

Qualquer um dos seguintes pode ser o “Estado do Processo”:

Conclusão

A menos que façam parte de uma vasta horda, os zumbis não são tão prejudiciais. Alguns não são grande coisa, e uma reinicialização rápida irá eliminá-los. No entanto, há um ponto a considerar.

As arquiteturas Linux têm um número máximo de processos e, como resultado, um número máximo de números de ID de processo. Quando o número máximo de processos zumbis de um computador é alcançado, novos processos não podem ser iniciados.

Processos zumbis não são processos; eles são os restos de processos mortos que seu processo pai não limpou corretamente. No entanto, se você notar que um determinado aplicativo ou processo está constantemente gerando zumbis, você deve investigar mais a fundo.

Provavelmente, é apenas um programa mal escrito; nesse caso, talvez haja uma versão atualizada que limpa depois que seu filho é processado adequadamente.

Emular cliques do mouse passando o mouse usando o mouse sem cliques no Windows 10
Usar um mouse ou teclado na postura errada de uso excessivo pode resultar em muitos problemas de saúde, incluindo tensão, síndrome do túnel do carpo e...
Adicione gestos do mouse ao Windows 10 usando essas ferramentas gratuitas
Nos últimos anos, os computadores e sistemas operacionais evoluíram muito. Houve um tempo em que os usuários tinham que usar comandos para navegar pel...
Controle e gerencie o movimento do mouse entre vários monitores no Windows 10
Gerenciador de mouse com tela dupla permite que você controle e configure o movimento do mouse entre vários monitores, diminuindo seus movimentos pert...