Comando killall: encerrar processos pelo nome, o sinal -9 e instalar o psmisc
O comando killall é um comando do Linux que escolhe os processos em execução pelo nome do programa em vez do número do processo (PID) e envia um sinal a eles; se você não indicar um sinal, ele envia SIGTERM (segundo o manual oficial). Como ele encerra de uma vez todos os processos com o mesmo nome, primeiro verificamos com pgrep e ps quatro processos iniciados em um servidor AlmaLinux 9 a partir de cópias do sleep com outros nomes; em um executável com nome de mais de 15 caracteres, só os 15 primeiros caracteres ficaram no nome do processo.
Executamos o killall apenas em processos xxsleep iniciados para teste com uma conta comum em um servidor Debian 12. As caixas de resultado mostram a saída de rpm, pgrep, ps, pidof, cat e kill executados com a conta root em um servidor AlmaLinux 9.8, e a saída do killall executado no servidor Debian 12. Os números de processo (PID), os nomes de processo, os caminhos dos executáveis e os nomes de conta foram trocados por valores de exemplo.
1️⃣ Instalar o comando killall
O killall faz parte do pacote psmisc. Em um servidor AlmaLinux 9.8, ao verificar com rpm a qual pacote /usr/bin/killall pertence, apareceu a versão psmisc 23.4.
rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killallpsmisc 23.4A lista de arquivos do mesmo pacote, vista com rpm -ql, também incluía pstree e fuser.
Se aparecer [command not found], ou seja, que o comando não foi encontrado, instale o pacote psmisc. Na família RHEL é [dnf install psmisc], e na família Debian, [apt install psmisc]. O servidor Debian 12 já tinha o psmisc 23.6 instalado, e o killall estava em /usr/bin/killall.
Ao verificar no servidor AlmaLinux 9.8, o pkill, de nome parecido, estava no pacote procps-ng, e o kill era um comando embutido do shell.
2️⃣ Como usar o comando killall
A forma básica é [killall nome do processo]. Ele encontra todos os processos em execução com o nome indicado e envia um sinal a eles; se você escrever vários nomes, ele faz o mesmo para cada nome (segundo o manual oficial).
Como os processos com o mesmo nome terminam todos de uma vez, verifique primeiro com pgrep o que está rodando com esse nome. Copiamos o sleep para uma pasta de trabalho com os nomes xxsleep-a1, xxsleep-a2 e xxsleep-longname-x1, iniciamos o xxsleep-a1 duas vezes, para um total de quatro processos, e mostramos números e nomes com -l.
pgrep -l xxsleep2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnamNa quarta linha, o executável se chama xxsleep-longname-x1, mas o nome do processo estava cortado em xxsleep-longnam.
Com -a, aparece a linha de comando completa que foi executada. Os dois xxsleep-a1 com o mesmo nome foram diferenciados pelo argumento final em segundos, 300 e 310.
pgrep -a xxsleep2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330Para encontrar só os processos cujo nome corresponde exatamente, adicione -x. O resultado com xxsleep-a1 foram dois números.
pgrep -x xxsleep-a12141
2142Para verificar só os números digitando um nome do jeito que é, use o pidof. Ao procurar xxsleep-a1, os dois números apareceram em uma linha.
pidof xxsleep-a12142 2141O ps mostra só os processos cujo nome corresponde exatamente quando você escreve vários nomes separados por vírgulas depois de -C.
ps -o pid,comm -C xxsleep-a1,xxsleep-a2 PID COMMAND
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2No servidor Debian 12, iniciamos quatro processos com os mesmos nomes e executamos [killall xxsleep-a1]: ele não mostrou nada e terminou com o código de saída 0. Ao procurar de novo com pgrep, os dois xxsleep-a1 tinham sumido e restavam só xxsleep-a2 e xxsleep-longname-x1. Se você escrever um caminho com barra (/) em vez de um nome, ele escolhe os processos que executam esse arquivo, seja qual for o nome (segundo o manual oficial).
Com o nome inexistente xxsleep-zz, apareceu uma linha com [no process found] depois do nome, e terminou com o código de saída 1. O código de saída só é 0 quando pelo menos um processo foi encerrado para cada nome indicado (segundo o manual oficial).
killall xxsleep-zzxxsleep-zz: no process foundPara encerrar só um processo cujo número você conhece, envie um sinal só a esse número com kill: Comando kill do Linux.
3️⃣ Opções do comando killall
Ao ler em /proc/PID/comm o nome do processo iniciado como xxsleep-longname-x1, só restavam os 15 primeiros caracteres: xxsleep-longnam.
cat /proc/2155/commxxsleep-longnamExecutamos o pgrep com xxsleep-longname, de 16 caracteres.
pgrep -a xxsleep-longnameTerminou sem saída e com o código de saída 1, e ao procurar de novo com xxsleep-longnam, de 15 caracteres, esse processo apareceu.
pgrep -l xxsleep-longnam2155 xxsleep-longnamQuando o killall recebe um nome com mais de 15 caracteres e há processos cujo nome completo ele não consegue ler, ele mira todos os que têm os 15 primeiros caracteres iguais; com -e, ele pula essas entradas (segundo o manual oficial). No servidor Debian 12, ao escrever xxsleep-longnam, os 15 primeiros caracteres, com -e e -v, apareceram linhas dizendo que três outros processos com o nome cortado em 15 caracteres foram pulados, e terminou com [no process found].
killall -e -v xxsleep-longnamkillall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process foundCom o nome completo xxsleep-longname-x1, depois das mesmas linhas de pulo apareceu uma linha mostrando o sinal enviado a esse processo.
killall -e -v xxsleep-longname-x1killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15Com -v, apareceu para cada processo que recebeu um sinal uma linha com o nome, o número e o número do sinal.
killall -v xxsleep-a2Killed xxsleep-a2(2150) with signal 15O -i pergunta, para cada processo, se deve encerrá-lo. Iniciamos de novo dois xxsleep-a1 e passamos y e n pela entrada padrão, nessa ordem: as duas perguntas apareceram seguidas em uma linha, e só o primeiro xxsleep-a1 terminou; o segundo continuou.
printf 'y\nn\n' | killall -i xxsleep-a1Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)O -u escolhe só os processos que pertencem a essa conta, e se você omitir o nome, o alvo são todos os processos dessa conta. Ao escrever também xxsleep-a1 depois do nome da conta, o sinal foi enviado só ao xxsleep-a1 que restava.
killall -v -u user xxsleep-a1Killed xxsleep-a1(2172) with signal 15O -o e o -y escolhem pela hora de início, e o tempo é escrito com um número seguido de uma unidade s, m, h, d, w, M ou y, como em [-o 30m].
O -r lê os nomes como expressões regulares estendidas. Ao passar o padrão ^xxsleep-a ao pgrep, apareceram três processos que começam com xxsleep-a.
pgrep -l '^xxsleep-a'2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2O -w espera, verificando a cada segundo, até que todos os processos que receberam o sinal sumam. Se um processo ignorar o sinal ou ficar como zumbi, a espera pode não ter fim.
A primeira tabela abaixo reúne os comandos de verificação e as opções do killall realmente executados neste artigo; as opções do killall não executadas estão na segunda tabela, segundo o manual oficial.
📌 Verificar processos e killall: resultados deste artigo
| Comando | Tarefa | Resultado neste artigo | |
|---|---|---|---|
| pgrep -l nome | Número e nome dos processos cujo nome o contém | Quatro linhas com xxsleep; o nome longo aparece só até os 15 primeiros caracteres, xxsleep-longnam | |
| pgrep -a nome | Número e linha de comando completa | Os dois xxsleep-a1 com o mesmo nome diferenciados pelos argumentos finais 300 e 310 | |
| pgrep -x nome | Só os números dos processos cujo nome corresponde exatamente | Com xxsleep-a1, duas linhas: 2141 e 2142 | |
| pidof nome | Os números em execução com esse nome, em uma linha | Com xxsleep-a1, 2142 2141 | |
| ps -o pid,comm -C nome | Número e nome dos processos cujo nome corresponde exatamente; vários nomes separados por vírgulas | Duas linhas de xxsleep-a1 e uma de xxsleep-a2 | |
| cat /proc/PID/comm | Nome do processo (até os 15 primeiros caracteres) | 2155 é xxsleep-longnam | |
| killall nome | SIGTERM aos processos com esse nome | Os dois xxsleep-a1 terminaram com código de saída 0; o nome inexistente xxsleep-zz deu no process found e código de saída 1 | |
| killall -e nome | Nomes com mais de 15 caracteres só quando o nome completo corresponde | xxsleep-longnam deu no process found; xxsleep-longname-x1 terminou | |
| killall -v nome | Mostra o resultado de cada processo que recebeu o sinal | Killed xxsleep-a2(2150) with signal 15 | |
| killall -i nome | Pede confirmação para cada processo antes de encerrá-lo | Ao digitar y e n, só o primeiro xxsleep-a1 terminou | |
| killall -u nome da conta | Só os processos que pertencem a essa conta | Escrito junto com um nome, só o xxsleep-a1 dessa conta terminou | |
| killall -9 nome | SIGKILL em vez de SIGTERM | Killed xxsleep-a2(2173) with signal 9 |
📎 Outras opções: segundo o manual oficial
| Opção | Tarefa | |
|---|---|---|
| -I, --ignore-case | Compara os nomes sem diferenciar maiúsculas e minúsculas | |
| -g, --process-group | Sinal ao grupo de processos em vez do processo (uma vez por grupo) | |
| -l, --list | Lista dos nomes de sinais conhecidos | |
| -n, --ns PID | Só processos no mesmo namespace de PID desse PID; por padrão, todos os namespaces | |
| -o, --older-than tempo | Só processos iniciados antes desse tempo (unidades s, m, h, d, w, M, y) | |
| -q, --quiet | Não avisa mesmo que nenhum processo tenha sido encerrado | |
| -r, --regexp | Lê os nomes como expressões regulares estendidas | |
| -s, --signal sinal | Sinal enviado em vez de SIGTERM | |
| -V, --version | Mostra as informações de versão | |
| -w, --wait | Espera até que todos os processos que receberam o sinal sumam | |
| -y, --younger-than tempo | Só processos iniciados depois desse tempo | |
| -Z, --context padrão | Só processos cujo contexto de segurança corresponde ao padrão de expressão regular estendida; escrito antes dos outros argumentos; o nome pode ser omitido |
🔲 Simulador do comando killall
O simulador abaixo começa com uma lista dos quatro processos xxsleep mais o xxsleep-a2 da conta de exemplo user1. Toque nos chips para comparar quais linhas somem da lista com [killall -v], [-i] e [-u]; os textos de saída do killall imitam a saída obtida no servidor Debian 12.
4️⃣ Sinais do killall
O sinal a enviar é escrito pelo nome, como [-HUP] ou [-SIGHUP], pelo número, como [-1], ou depois da opção -s (segundo o manual oficial). [killall -9 nome do processo] envia o sinal 9, SIGKILL. SIGKILL é um sinal que o processo não consegue capturar nem ignorar (segundo o manual oficial), então o processo termina sem conseguir fazer a limpeza. Por isso ele é enviado quando o sinal padrão, SIGTERM, não encerra o processo.
No servidor Debian 12, ao adicionar -9 junto com -v ao xxsleep-a2 iniciado de novo, apareceu uma linha com o número de sinal 9.
killall -9 -v xxsleep-a2Killed xxsleep-a2(2173) with signal 9Verificamos os nomes e números dos sinais com [kill -l]. O killall também tem uma opção -l que mostra os nomes de sinais que ele conhece.
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
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAXAo digitar um único número, apareceu só o nome desse sinal. O 15 que o killall envia por padrão era TERM, e o 9 enviado com -9 era KILL.
kill -l 15TERMkill -l 9KILLSe você escrever um nome de sinal que não está na lista, aparece uma mensagem no formato [FOO: unknown signal; killall -l lists signals.] (segundo o manual oficial e o texto do programa).
🔢 FAQ & conteúdo recomendado
Verificação em tempo real
Comando top do Linux (ver uso de CPU e memória)
Comando que mostra em tempo real quanta CPU e memória cada processo usa.
Controle de jobs
Segundo plano (Back Ground) e primeiro plano (Fore Ground) no Linux: controlar processos
Método de controle de jobs para mandar um comando para o segundo plano e trazê-lo de volta ao primeiro plano.
Arquivos abertos
[Linux] Comando lsof: mostrar informações de arquivos em uso
Comando que mostra os arquivos e sockets que um processo tem abertos, junto com o PID.
ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.