Ubuntu Encerrar Programas (kill)

Quando um programa trava e o botão de fechar não responde, o terminal resolve. Nesta aula você vai encerrar programas pelo número (kill) e pelo nome (pkill e killall), e entender a diferença entre pedir para fechar e forçar o fechamento.

Você vai aprender
  • O que é um sinal e por que existem o "por favor, feche" e o "feche agora".
  • Como encerrar um processo pelo PID com kill.
  • Como encerrar pelo nome com pkill e killall, e o cuidado que isso exige.
  • O que significam "Processo inexistente" e "Operação não permitida".

Antes, leia ps, pgrep, top: para encerrar um processo você precisa saber o PID ou o nome dele.


Sinais: como o sistema conversa com os processos

Apesar do nome, kill ("matar") não mata diretamente. Ele envia um sinal, uma mensagem curta do sistema para o processo. Os dois sinais mais importantes são:

SinalNúmeroSignificaO que o programa faz
SIGTERM15"Por favor, termine." (terminate)Salva o que precisa, fecha arquivos e sai. É o padrão do kill.
SIGKILL9"Pare agora."Nada: o sistema remove o processo à força. Ele não tem chance de salvar.
SIGINT2InterromperÉ o que o Ctrl+C envia no terminal.
SIGHUP1"O terminal fechou" (hang up)Muitos serviços usam para recarregar a configuração.
SIGSTOP / SIGCONT19 / 18Pausar / continuarO processo congela e depois volta de onde parou.
Regra de ouro

Sempre tente primeiro o SIGTERM (o padrão). Use -9 só se, depois de alguns segundos, o processo continuar lá. Com -9, trabalho não salvo é perdido e arquivos podem ficar corrompidos.


kill: encerrar pelo PID

kill
O comando: envia um sinal.
2251
O PID do processo que vai receber o sinal. Sem sinal escolhido, vai o SIGTERM.

O passo a passo completo: achar o PID, enviar o sinal e conferir.

$ pgrep -l chrome
2210 chrome
2251 chrome
$ kill 2251
$ pgrep -l chrome
2210 chrome                                  « o 2251 sumiu

Como quase todo comando do Linux, o kill fica em silêncio quando dá certo. Para conferir, procure o processo de novo, ou olhe o código de saída:

$ kill 2210
$ echo $?
0                                            « o sinal foi entregue
Código 0 não quer dizer "morreu"

O 0 significa que o sinal foi entregue. Um programa travado pode receber o SIGTERM e mesmo assim não fechar. Por isso confira sempre com pgrep.

Escolher o sinal

Há três formas de escrever o mesmo sinal. Todas fazem a mesma coisa:

kill
O comando.
-9
O sinal, pelo número. Também vale -KILL, -SIGKILL ou -s KILL.
2210
O PID.
$ kill -15 2210
$ kill -TERM 2210
$ kill -s TERM 2210
$ kill -9 2210

As três primeiras linhas são iguais a um simples kill 2210. A última é o último recurso.

Ver a lista de sinais

$ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
$ kill -l 9
KILL

Vários processos de uma vez

$ kill 2210 2251
$ kill $(pgrep chrome)

A forma $(comando) roda o comando de dentro e coloca o resultado no lugar. É o que o pkill, abaixo, faz de forma mais simples.


pkill e killall: encerrar pelo nome

pkill

O pkill é o "irmão" do pgrep: aceita as mesmas opções, mas em vez de listar, envia o sinal.

pkill
Envia um sinal aos processos que batem com o nome.
chrome
Um pedaço do nome do processo (como no pgrep).
$ pgrep -l chrome
2210 chrome                                  « primeiro, confira o que vai ser atingido
2251 chrome
$ pkill chrome
$ pgrep -l chrome
$ echo $?
1                                            « nenhum chrome restante

Como no pgrep, o padrão é um pedaço do nome. pkill gnome encerraria o gnome-shell e o gnome-text-edit juntos, e o gnome-shell é a sua interface gráfica. Por isso confira com pgrep -l antes, com o mesmo padrão.

pkill -f é poderoso demais

pkill -f python encerra qualquer processo com "python" no comando, inclusive partes do sistema. Rode pgrep -af python antes e confira linha por linha.

killall

O killall ("matar todos") exige o nome exato do processo, o que é mais seguro:

$ killall chrome
$ killall chromium
chromium: nenhum processo localizado

De novo o nome do processo (chrome) e não o do aplicativo (Chromium). Diferente do pkill, o killall avisa quando não acha nada.

Qual usar?

FormaExemploMelhor quando…
kill + PIDkill 2251Você quer encerrar um processo específico.
pkillpkill chromeVocê quer todos os processos com um pedaço do nome.
killallkillall chromeVocê sabe o nome exato e quer segurança contra pegar outros.
Forçar saída (GNOME)janela "não está respondendo"O app travou e a interface ainda funciona.
top / htopk / F9Você está olhando a lista ao vivo.
App Recursosclique com o botão direitoVocê prefere a interface gráfica.

Missão: o Chromium travou na máquina fictícia. Descubra os PIDs dele (lembre: o processo se chama chrome), encerre todos e confirme com pgrep que não sobrou nenhum. Tente uma vez com kill e, depois de Reiniciar, com pkill.


Pela interface gráfica

Quando um app trava, o GNOME mostra depois de alguns segundos a janela "… não está respondendo", com dois botões: Esperar e Forçar saída. "Forçar saída" envia o SIGKILL ao app. Use quando esperar não resolveu.

E o xkill?

Guias antigos ensinam o xkill: você clica na janela e ela fecha. Ele só funciona com janelas do sistema gráfico antigo (X11). O Ubuntu 26.04 usa Wayland, então o xkill não pega a maioria das janelas. Prefira pkill ou "Forçar saída".

Se a tela inteira travou e nem o terminal abre, veja Quando o Sistema Trava.


Quando não funciona

"Processo inexistente"
$ kill 6230
bash: kill: (6230) - Processo inexistente

O que aconteceu: não existe processo com esse PID. Ele já fechou, ou o número foi digitado errado, ou é um PID antigo (cada vez que o programa abre, o número muda).

Como resolver: procure o PID atual com pgrep -l nome.

"Operação não permitida"
$ kill 1
bash: kill: (1) - Operação não permitida

O que aconteceu: o processo pertence a outro usuário (aqui, ao root). Você só pode enviar sinais para os seus próprios processos.

Como resolver: confira o dono na coluna USER do ps aux. Se for um serviço do sistema, prefira sudo systemctl restart nome (veja sudo). Nunca encerre o PID 1: ele é o systemd, que mantém todo o sistema de pé.

O processo não fecha com kill
$ kill 2210
$ pgrep -l chrome
2210 chrome                                  « continua lá
$ kill -9 2210
$ pgrep -l chrome
$

O que aconteceu: o programa estava travado demais para responder ao pedido educado (SIGTERM).

Como resolver: espere uns 5 segundos e então use kill -9. Se nem o -9 resolver e o ps mostrar o estado D, o processo está esperando o disco ou a rede. Aí nada o encerra até a espera acabar, ou até reiniciar.

Encerrei o processo errado

O que aconteceu: um pkill com padrão curto demais (por exemplo, pkill gnome) pegou outros processos. Se o gnome-shell morrer, a sessão gráfica cai e você volta para a tela de login.

Como resolver: faça login de novo. Da próxima vez, confira antes com pgrep -l padrão ou use killall com o nome exato.


Referência de opções

ComandoDescrição
kill PIDEnvia SIGTERM (15) ao processo
kill -9 PIDEnvia SIGKILL: encerra à força
kill -s SINAL PIDEscolhe o sinal pelo nome
kill -lLista os sinais
kill -STOP PID / kill -CONT PIDPausa / continua
pkill nomeSinal para todos com o pedaço do nome
pkill -f textoProcura no comando completo
pkill -u usuárioTodos os processos de um usuário
pkill -9 nomeForça o encerramento pelo nome
killall nomeSinal para todos com o nome exato
killall -i nomePergunta antes de cada um

Exercícios

1. Encerrar à força

O processo 4120 não fechou com kill 4120. Complete para forçar:

kill 4120

2. Pelo nome exato

Complete para encerrar todos os processos com o nome exato chrome:

chrome

3. Conferir antes de encerrar

Complete para ver, com o comando completo, o que pkill -f python atingiria:

python

4. Qual sinal o kill envia quando você não escolhe nenhum?

5. kill 812 respondeu "Operação não permitida". Qual a causa mais provável?


Resumo

  • kill PID pede para o processo terminar (SIGTERM); kill -9 PID força (SIGKILL), e só deve vir depois.
  • pkill padrão encerra pelo pedaço do nome; killall nome pelo nome exato.
  • Sempre confira com pgrep -l (ou pgrep -af) antes e depois.
  • Você só encerra processos seus; os do sistema pedem sudo ou systemctl.
  • Travou tudo? Veja Quando o Sistema Trava.