CMD Master
Voltar ao blog
AtualizadoArnošt Havelka

Como encontrar e encerrar com segurança um processo travado no Bash

Confirme o processo e o PID, envie SIGTERM primeiro, verifique o resultado e reserve SIGKILL para processos que não encerram normalmente.

Iniciar lição interativa
Como encontrar e encerrar com segurança um processo travado no Bash

A maneira segura de encerrar um processo travado é identificá-lo, confirmar seu identificador de processo (PID) atual, enviar o sinal normal TERM e verificar se ele terminou. Use KILL apenas quando o encerramento normal falhar. A lição sobre encerramento de processos oferece um processo controlado para praticar o comando antes de usá-lo em um sistema real.

Confirme o processo antes de enviar um sinal

Comece com uma listagem de processos, não com um PID copiado de uma mensagem antiga:

ps -ef

Leia o PID junto com o proprietário e o comando completo. Se você já tiver um candidato, como o PID 123, restrinja a saída:

ps -p 123 -o pid,ppid,user,stat,etime,command

Substitua 123 pelo PID que acabou de observar. Identificadores de processo podem ser reutilizados depois que um programa termina, portanto o número sozinho não é uma evidência duradoura. Um serviço também pode ter vários processos auxiliares com nomes semelhantes; confirme qual deles realmente está travado.

Terminal
~$kill 3456

Peça ao processo que encerre normalmente

Depois de confirmar um PID positivo, envie TERM de forma explícita:

kill -TERM 123

No Bash, kill 123 sem opção também envia TERM por padrão. O sinal pede ao programa que encerre e permite que ele feche arquivos, conclua gravações e execute rotinas de limpeza. Aguarde um pouco e verifique novamente o mesmo PID:

ps -p 123 -o pid,user,stat,command

A ausência de uma linha geralmente significa que o processo terminou. Uma linha restante mostra que ele ainda está presente, mas a causa pode ser uma limpeza demorada, E/S bloqueada, um processo suspenso ou um supervisor que iniciou outro processo. Confira os logs e o estado do serviço antes de aumentar a força do sinal.

Use SIGKILL apenas como último recurso

Se o processo original ainda existir, ignorar TERM e você tiver certeza de que é o destino correto, envie:

kill -KILL 123

KILL não pode ser capturado nem ignorado. O sistema operacional interrompe o processo sem permitir que o aplicativo faça a limpeza, portanto gravações parciais, arquivos temporários ou processos filhos abandonados podem permanecer. O sinal pode encerrar o processo imediato, mas não comprova que o problema de origem foi resolvido.

Use um PID positivo. Valores como 0, -1 ou outro número negativo podem selecionar um grupo de processos ou um conjunto muito maior. Evite comandos amplos copiados, como padrões de pkill, até entender exatamente o que eles correspondem.

Lide com erros de permissão e serviços que reiniciam

“Operation not permitted” normalmente significa que o processo pertence a outra conta ou está protegido por uma política do sistema. Confira o proprietário novamente antes de considerar sudo. Privilégios de administrador permitem executar uma decisão correta; eles não tornam seguro um PID incerto.

Se o processo voltar imediatamente, um gerenciador de serviços ou orquestrador de contêineres pode estar reiniciando-o. Investigue esse gerenciador e os logs do aplicativo em vez de encerrar repetidamente os novos processos.

Teste de conhecimentos

1 / 1

O que você deve confirmar imediatamente antes de enviar um sinal?

Consulte o guia de listagem de processos se precisar de mais ajuda para interpretar a saída de ps. O Bash documenta o sinal padrão e as formas de PID aceitas em sua referência de comandos internos de controle de tarefas.

Referências

Estes links de documentação trazem detalhes confiáveis sobre os comandos usados neste artigo.

A seguir

Prática de Gerenciamento de Processos

Filtrar e gerenciar processos.