Comando kill: como encerrar processos travados na VPS
Aprenda a usar o comando kill na VPS: achar o PID, escolher o sinal, usar pkill e killall, parar serviços do systemd e entender o processo zumbi.
Por Redação Eleven Host · @robson.direitodigital · 31 de outubro de 2026 · 9 min de leitura

Capa da Redação Eleven Host para o guia: Comando kill: como encerrar processos travados na VPS Arte: Eleven Host
O comando kill envia um sinal a um processo, indicado pelo número de identificação dele, o PID. Se você não escolher o sinal, o padrão é o TERM, que pede ao programa para encerrar. Na VPS, é um jeito de tentar parar um processo travado sem reiniciar a máquina.
O nome engana: kill não "mata" por si só, ele entrega um recado ao processo. Neste guia você vai ver como achar o PID, quando usar TERM e quando usar KILL, como parar processos pelo nome com pkill, o que muda no killall, como lidar com serviços do systemd e por que um processo zumbi não some com kill. Se a VPS ainda é novidade para você, comece pelo guia O que é servidor VPS: guia simples para iniciantes.
O que o kill faz de verdade
Segundo a página de manual, o comando kill envia o sinal especificado aos processos ou grupos de processos indicados. Cada sinal tem um nome e um número, e o que acontece depois depende do sinal e do programa.
Para ver os nomes de sinais que o sistema conhece, use a opção -l:
kill -l
Sem número nem máscara, a opção lista os nomes. Se você passar um número, ela o converte para o nome. Para escolher o sinal ao enviar, a opção -s aceita o nome ou o número. Estes são exemplos montados com as opções documentadas:
kill 12345
kill -s TERM 12345
kill -s KILL 12345
kill -HUP 12345
O primeiro e o segundo fazem a mesma coisa, porque sem sinal o padrão é TERM. O 12345 é um PID de exemplo.
Kill entrega um sinal. Parar o processo é uma decisão do programa que o recebe, e a exceção são os sinais que ele não consegue interceptar.
Achar o PID antes de encerrar
Antes de mandar um sinal, confirme qual processo é o certo. A página do ps traz estes exemplos:
ps -ef
ps axu
ps -ejH
ps axjf
Os dois primeiros listam os processos em sintaxe padrão e BSD. Os outros dois imprimem a árvore de processos, para ver quem é pai de quem. Para listar só o PID de um programa pelo nome:
ps -C syslogd -o pid=
O pgrep faz uma busca parecida pelo nome. Com a opção -l ele mostra o nome junto do PID, e com -a mostra a linha de comando completa:
pgrep -a meu-app
Se o processo travado está consumindo memória, vale olhar o uso antes de decidir. O guia Ver uso de memória no Linux: free, top e htop na VPS mostra como acompanhar isso.
TERM primeiro, KILL só se precisar
A página de manual diz que o sinal TERM deve ser usado de preferência ao sinal KILL, que é o número 9. O motivo é a limpeza: o programa pode ter um tratador para o TERM e, ao recebê-lo, fazer a limpeza. O KILL não pode ser interceptado, então o processo não tem chance de fazer essa limpeza antes de terminar.
Alguns sinais da página signal(7), com os números da coluna das arquiteturas x86 e ARM, são estes:
- SIGHUP (1): terminal de controle desconectado ou fim do processo que o controlava.
- SIGKILL (9): sinal de kill, que não pode ser capturado, bloqueado nem ignorado.
- SIGTERM (15): sinal de término.
A opção -s aceita o nome do sinal, então você não precisa decorar o número.
Uma ordem prática, que é orientação nossa e não uma citação da documentação: mande TERM, espere alguns instantes, confira com ps se o processo saiu e só então use KILL.
kill -s TERM 12345
ps -ef
kill -s KILL 12345
O SIGHUP pede cuidado: no exemplo da página do pgrep, pkill -HUP syslogd serve para fazer o syslog reler o arquivo de configuração. O que o HUP provoca depende do programa que o recebe.
VPS a partir de R$ 17,00/mês no Plano Bronze; confira na loja o que cada plano inclui. Quer conhecer a VPS da Eleven Host? Conhecer a VPS
pkill e pgrep: encerrar pelo nome
Quando você conhece o nome do programa, mas não o PID, o pkill envia o sinal a cada processo que combinar com o padrão. Sem outro sinal, o padrão é TERM. A sintaxe do sinal é um traço seguido do nome ou do número, como no exemplo da própria página:
pkill -HUP syslogd
Estas são algumas das opções da página do pgrep:
-f: normalmente o padrão é comparado só com o nome do processo; com-f, a linha de comando inteira entra na comparação.-u: só processos do usuário efetivo indicado.-x: o nome precisa ser exatamente igual ao padrão.-le-a: existem só nopgrep, e mostram o nome ou a linha de comando completa ao lado do PID.
O risco do -f é pegar um processo que você não esperava, porque o padrão passa a valer para a linha de comando inteira. Uma precaução nossa: rode primeiro o pgrep com as mesmas opções, olhe a lista e só depois troque por pkill. Estes exemplos são montados com as opções documentadas:
pgrep -f "python3 meu-app.py"
pkill -f "python3 meu-app.py"
pkill -u usuario meu-app
Segundo a página, -l e -a são só do pgrep. Para ver nomes e linhas de comando, use o pgrep.
killall: vários processos com o mesmo comando
A página do killall diz que ele envia um sinal aos processos que estejam rodando algum dos comandos indicados, e que o sinal padrão também é o SIGTERM. A página o apresenta como parte do projeto psmisc.
Opções úteis, segundo a página:
-i: pergunta antes de encerrar cada processo.-u: só processos do usuário indicado.-w: espera os processos morrerem.
Um exemplo com a opção de confirmação:
killall -i meu-app
A página avisa que o killall pode ficar esperando sem fim se o sinal foi ignorado, não teve efeito ou o processo ficou em estado zumbi. Esse é o assunto de uma das seções adiante.
Serviço do systemd: use systemctl stop
Se o processo faz parte de um serviço gerenciado pelo systemd, a recomendação aqui é parar o serviço pelo próprio systemd. Esse conselho é nosso, e não uma frase da documentação. A página do systemctl descreve o stop como parar (desativar) uma ou mais unidades, e o restart como parar e depois iniciar. O guia systemctl: como iniciar, parar e ver serviços na VPS detalha esses comandos.
systemctl status meu-app
sudo systemctl stop meu-app
sudo systemctl restart meu-app
O systemctl também tem um subcomando kill, que envia um sinal do Unix a um ou mais processos da unidade. A opção --signal= escolhe o sinal, com padrão SIGTERM, e a --kill-whom= escolhe para quem enviar (main, control, cgroup ou all, sendo all o padrão):
sudo systemctl kill meu-app
sudo systemctl kill --signal=SIGKILL meu-app
A diferença é de papel. O stop desativa a unidade pelo systemd. O systemctl kill só manda sinal aos processos dela. Para ler o histórico do serviço, veja journalctl: como ver os logs do sistema na VPS.
Processo zumbi: kill não resolve
No ps, um processo em estado Z aparece como "defunct", ou zumbi: ele terminou, mas o pai ainda não recolheu o resultado. A página wait(2) explica que um filho que termina e não foi esperado vira zumbi, e o kernel guarda o PID, o status de término e o uso de recursos até o pai fazer o wait.
Como o zumbi já terminou, não há o que encerrar. Quem remove o zumbi é o wait do pai. Se o pai termina, o init adota os filhos zumbis e faz o wait automaticamente.
Isso importa porque, segundo a mesma página, enquanto o zumbi não é removido ele ocupa uma posição na tabela de processos do kernel, e, se a tabela encher, não será possível criar novos processos. Na prática, olhe o processo pai na árvore do ps -ejH.
Permissões: processo de outro usuário
Segundo a página kill(2), para um usuário comum enviar o sinal, o ID do usuário real ou efetivo de quem envia precisa ser igual ao ID real ou salvo do processo alvo. Na prática, para sinalizar um processo de outro usuário, você roda o comando com sudo. Quando o sistema recusa, o erro pode ser o EPERM, que indica falta de permissão para enviar o sinal.
Dois valores especiais pedem cuidado:
- PID 0: os processos do grupo do processo que chamou recebem o sinal.
- PID -1: os processos com PID maior que 1 recebem o sinal.
O PID -1 atinge de uma vez os processos com PID maior que 1 para os quais você tem permissão de envio. Releia o comando duas vezes antes de apertar Enter.
Checklist antes de encerrar um processo
- Confirme o PID com
psoupgrep -a, e veja o nome e a linha de comando. - Se for um serviço do systemd, use
sudo systemctl stopprimeiro. - Mande TERM (o padrão) e espere o programa fazer a limpeza.
- Confira com
psse o processo saiu antes de pensar em KILL. - Use
kill -s KILLsó se o TERM não funcionou, sabendo que ele não tem chance de fazer a limpeza. - Com
pkill -f, rode o mesmo padrão nopgrep -aantes. - Processo de outro usuário pede
sudo; cuidado com os PIDs 0 e -1. - Processo em estado
Zé zumbi: olhe o pai.
VPS a partir de R$ 17,00/mês no Plano Bronze; confira na loja o que cada plano inclui. Quer conhecer a VPS da Eleven Host? Ver os planos de VPS
Perguntas frequentes
O que o comando kill faz?
Envia um sinal a um processo ou grupo de processos, indicado pelo PID. Sem sinal escolhido, envia o TERM, que pede ao programa para encerrar.
Qual a diferença entre kill e kill -9?
O kill sozinho envia TERM, que o programa pode tratar para fazer a limpeza. O kill -9 equivale a kill -s KILL, porque o KILL é o sinal número 9, e não pode ser interceptado.
Como achar o PID de um processo?
Use ps -ef para listar os processos, ou pgrep -a com o nome do programa para ver o PID e a linha de comando.
Kill remove um processo zumbi?
Não. O zumbi já terminou, e quem o remove é o wait do processo pai ou do init, se o pai terminar.
Como encerrar um serviço do systemd?
Use sudo systemctl stop com o nome do serviço. O systemctl kill existe, mas só envia um sinal aos processos da unidade.