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 interativaA 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.
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 / 1O 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
Filtrar e gerenciar processos.