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.
- 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
pkillekillall, 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:
| Sinal | Número | Significa | O que o programa faz |
|---|---|---|---|
SIGTERM | 15 | "Por favor, termine." (terminate) | Salva o que precisa, fecha arquivos e sai. É o padrão do kill. |
SIGKILL | 9 | "Pare agora." | Nada: o sistema remove o processo à força. Ele não tem chance de salvar. |
SIGINT | 2 | Interromper | É o que o Ctrl+C envia no terminal. |
SIGHUP | 1 | "O terminal fechou" (hang up) | Muitos serviços usam para recarregar a configuração. |
SIGSTOP / SIGCONT | 19 / 18 | Pausar / continuar | O processo congela e depois volta de onde parou. |
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
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,-SIGKILLou-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 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?
| Forma | Exemplo | Melhor quando… |
|---|---|---|
| kill + PID | kill 2251 | Você quer encerrar um processo específico. |
| pkill | pkill chrome | Você quer todos os processos com um pedaço do nome. |
| killall | killall chrome | Você 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 / htop | k / F9 | Você está olhando a lista ao vivo. |
| App Recursos | clique com o botão direito | Você 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.
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
$ 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.
$ 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é.
$ 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.
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
| Comando | Descrição |
|---|---|
kill PID | Envia SIGTERM (15) ao processo |
kill -9 PID | Envia SIGKILL: encerra à força |
kill -s SINAL PID | Escolhe o sinal pelo nome |
kill -l | Lista os sinais |
kill -STOP PID / kill -CONT PID | Pausa / continua |
pkill nome | Sinal para todos com o pedaço do nome |
pkill -f texto | Procura no comando completo |
pkill -u usuário | Todos os processos de um usuário |
pkill -9 nome | Força o encerramento pelo nome |
killall nome | Sinal para todos com o nome exato |
killall -i nome | Pergunta antes de cada um |
Exercícios
1. Encerrar à força
O processo 4120 não fechou com kill 4120. Complete para forçar:
2. Pelo nome exato
Complete para encerrar todos os processos com o nome exato chrome:
3. Conferir antes de encerrar
Complete para ver, com o comando completo, o que pkill -f python atingiria:
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 PIDpede para o processo terminar (SIGTERM);kill -9 PIDforça (SIGKILL), e só deve vir depois.pkill padrãoencerra pelo pedaço do nome;killall nomepelo nome exato.- Sempre confira com
pgrep -l(oupgrep -af) antes e depois. - Você só encerra processos seus; os do sistema pedem
sudoousystemctl. - Travou tudo? Veja Quando o Sistema Trava.