Linux / Comando killall: enviar sinais a processos pelo nome
No Linux, killall da implementação psmisc envia um sinal aos processos que executam os comandos com os nomes indicados. O sinal padrão é SIGTERM, um pedido de término. Se várias instâncias corresponderem ao nome, todas podem ser atingidas; confira os candidatos antes da ação.
Psmisc é um conjunto de pequenos utilitários que consultam informações de processos em /proc. Este artigo trata dessa implementação para Linux. Não transfira os comandos automaticamente para outro Unix: o nome killall pode designar uma operação diferente.
Sintaxe e implementação
killall [opções] nome ...
Confira man killall no sistema em que pretende usá-lo. Depois de confirmar que se trata de psmisc, killall -V mostra a versão e killall -l lista os sinais conhecidos. A disponibilidade de um programa chamado killall, sozinha, não identifica sua implementação.
O manual de killall do projeto psmisc documenta a seleção pelo nome e a opção -r para interpretar o nome como expressão regular estendida. A pesquisa por expressão regular não é o modo padrão dessa ferramenta.
Consultar processos com o mesmo nome
myworker é um nome ilustrativo de processo de teste. Antes de considerar qualquer sinal, consulte os candidatos:
pgrep -a -x myworker
A saída mostra identificadores de processo, os PIDs, e linhas de comando. Confira todas as linhas, não apenas a primeira. Se a consulta revelar várias instâncias, uma ação pelo nome poderá afetar mais de uma delas. O guia de pgrep e seus critérios de pesquisa explica a consulta.
Essa consulta não é uma simulação interna de killall: pgrep usa expressões regulares por padrão, mesmo com -x. Para nomes simples como myworker, ela ajuda a conferir o nome inteiro; nomes com metacaracteres, nomes longos ou critérios adicionais exigem cuidado. Confira usuário, argumentos e PID também com ps quando precisar distinguir as instâncias.
Enviar SIGTERM pelo nome
Somente quando todas as correspondências forem seus processos de teste autorizados, a forma explícita é:
killall -TERM myworker
Na implementação psmisc, -TERM especifica SIGTERM; sem uma opção de sinal, ele também é o padrão. O comando normalmente não mostra uma lista de PIDs no caso bem-sucedido. Ausência de texto não comprova que cada aplicação terminou ou concluiu sua limpeza.
O guia de kill e interpretação dos sinais explica por que enviar SIGTERM e observar o término são etapas diferentes. Uma aplicação pode tratar, bloquear ou ignorar esse sinal; o tempo para parar depende do programa.
Restringir nome e usuário
Para limitar o nome myworker aos processos pertencentes à conta alice:
killall -u alice myworker
Substitua alice por uma conta existente e confirme que todos os alvos correspondem à operação autorizada. Selecionar um usuário não muda a identidade de quem executa o comando nem concede novas permissões. O nome continua sendo parte essencial da restrição desse exemplo.
No manual de psmisc, nomes são opcionais quando se usa -u. Portanto, retirar myworker não significa apenas “tentar novamente”: pode ampliar a ação aos processos daquele usuário. Uma consulta de pgrep com usuário pode ajudar a investigar, mas os critérios das duas ferramentas não devem ser considerados idênticos sem conferir a implementação e o campo usado.
Prática com duas instâncias de um executável de teste
O exemplo completo exige Linux, Bash, killall de psmisc, ps de procps-ng e os utilitários cp, mktemp e sleep. Execute-o numa pasta gravável, em um Bash sem set -e. Ele cria uma pasta nova, copia o executável sleep como demo-worker e inicia duas esperas de 30 segundos.
A ação usa o caminho absoluto do arquivo recém-criado. No modo sem -r de psmisc, um nome contendo / seleciona processos que executam aquele arquivo, em vez de apenas comparar o nome curto. Isso limita esta prática à cópia exclusiva que ela acabou de criar. Não substitua o caminho por um nome amplo nem use um interpretador ou script como se tivesse a mesma identidade de executável.
(
for tool in killall ps cp mktemp sleep; do
command -v "$tool" >/dev/null || exit 1
done
sleep_bin=$(type -P sleep) || exit 1
demo_dir=$(mktemp -d "$PWD/killall-demo.XXXXXX") || exit 1
cp -- "$sleep_bin" "$demo_dir/demo-worker" || exit 1
"$demo_dir/demo-worker" 30 &
demo_one=$!
"$demo_dir/demo-worker" 30 &
demo_two=$!
sleep 0.2
ps -p "$demo_one,$demo_two" -o pid,user,stat,comm,args
if kill -0 "$demo_one" && kill -0 "$demo_two"; then
killall -v -s TERM "$demo_dir/demo-worker"
signal_status=$?
else
signal_status=1
fi
wait "$demo_one"
first_status=$?
wait "$demo_two"
second_status=$?
printf 'killall=%s primeiro=%s segundo=%s\n' \
"$signal_status" "$first_status" "$second_status"
)
A consulta inicial deve mostrar os dois filhos e seus argumentos. Se SIGTERM encerrar ambos antes de completarem a espera natural, o resumo esperado no Bash é killall=0 primeiro=143 segundo=143. Esse é o resultado previsto para a prática, não uma saída medida nesta verificação. -v pode mostrar os alvos sinalizados e o shell pode mostrar mensagens de término.
O bloco não usa -w: cada wait recolhe o estado de um filho criado pelo próprio Bash. Um estado 143 representa término por SIGTERM nesse caso; 0 pode indicar que o sleep terminou naturalmente. Os estados são guardados separadamente antes de imprimir o resumo. A pasta de teste fica disponível para inspeção.
Na verificação disponível, Bash 5.3.9 do Git para Windows não encontrou killall nem pgrep. Os quatro blocos originais e o exemplo completo passaram pela análise de sintaxe; não foram executados killall, seleção de processos Linux, cópia de executáveis ou envio de sinais para esta prática. Essa análise não confirma o funcionamento de psmisc em Linux.
Opções para escolher e acompanhar a ação
| Opção | Uso |
|---|---|
-s sinal |
Escolhe o sinal em vez do SIGTERM padrão. |
-u usuário |
Limita aos processos do usuário indicado; mantenha o nome quando ele fizer parte do critério. |
-i |
Pede confirmação interativa antes da sinalização; aceitar a confirmação executa a ação. |
-v |
Informa se o sinal foi enviado com sucesso; não é uma simulação. |
-w |
Espera os processos sinalizados deixarem de existir, com as limitações descritas abaixo. |
Não transporte letras de opções entre ferramentas sem conferir o significado. Em killall de psmisc, -e trata correspondências exatas de nomes muito longos e pode pular entradas cujo nome completo esteja indisponível; não significa exibir alvos como a opção -e de pkill. O manual descreve casos de nomes com mais de 15 caracteres em que a comparação pode ficar limitada ao prefixo; usar -e reduz esse tipo de correspondência incerta.
Resultado, espera e serviços
Na forma com nomes, o manual de psmisc define estado 0 quando há sucesso para pelo menos um processo de cada comando listado; caso contrário, retorna um estado não zero. Isso não demonstra que todas as instâncias terminaram. Confira o estado imediatamente após killall, as mensagens e uma nova consulta aos processos antes de concluir que a operação terminou.
-w verifica aproximadamente uma vez por segundo se os processos ainda existem e pode esperar indefinidamente se o sinal for ignorado, não tiver efeito ou se o processo permanecer defunto. Um processo defunto já terminou a execução, mas ainda aguarda que o pai recolha seu estado. -w não é uma opção de tempo limite nem uma garantia de parada rápida.
O manual também informa que -w não distingue um PID que desapareceu e foi reutilizado entre duas verificações. Nomes podem mudar e um supervisor pode iniciar novas instâncias. Para um serviço administrado por systemd, uma operação de parada da unidade correta costuma ser mais apropriada; use o procedimento documentado do gerenciador presente naquele sistema, em vez de pressupor que todo Linux usa o mesmo gerenciador.
Se precisar apenas de um processo específico, identifique seu PID e reavalie se uma ação pelo nome é adequada. Não use SIGKILL como uma substituição automática por falta de resposta: esse sinal impede o tratamento de limpeza da aplicação, e o trabalho não salvo pode ser perdido.
Pergunta frequente
Killall encerra todos os processos do sistema?
Na implementação Linux psmisc, a forma com nomes seleciona os comandos indicados, podendo atingir várias instâncias. As opções podem ampliar ou restringir essa seleção; por exemplo, -u permite omitir nomes. Outras implementações Unix podem ter outro significado, por isso confirme o manual antes de executar.
Documentação
O manual de killall publicado pelo Debian detalha nomes longos, seleção por arquivo e limites de espera. Compare essas condições com a versão instalada antes de transportar uma rotina de sinalização.




