Da página man do killall
killall envia um sinal para todos os processos executando qualquer um dos especificados comandos. Se nenhum nome de sinal for especificado, SIGTERM será enviado.
Quando você faz um kill -9
, você está enviando o sinal SIGKILL. Se você quiser enviar um SIGKILL com killall, você precisa fazer
killall -s SIGKILL <PROCESSNAME>
Uma boa explicação da diferença entre o SIGKILL e o SIGTERM (e por que você deveria experimentar o SIGTERM primeiro)
De link
O envio de sinais para processos usando kill em um sistema Unix não é um novo tópico para a maioria dos administradores de sistemas, mas muitas vezes me perguntaram sobre a diferença entre matar e matar -9.
Sempre que você usar kill em um processo, estará realmente enviando o processo um sinal (em quase todas as situações - eu vou entrar nisso em breve). Aplicativos C padrão possuem um arquivo de cabeçalho que contém as etapas que o processo deve seguir se receber um sinal particular. Você pode obter uma lista completa dos sinais disponíveis no seu sistema verificando a página man para matar.
Considere um comando como este:
kill 2563
Isso enviaria um sinal chamado SIGTERM para o processo. Uma vez o processo recebe o aviso, algumas coisas diferentes podem acontecer:
- o processo pode parar imediatamente
- o processo pode parar após um pequeno atraso após a limpeza dos recursos
- o processo pode continuar sendo executado indefinidamente
O aplicativo pode determinar o que deseja fazer uma vez SIGTERM é recebido. Enquanto a maioria dos aplicativos limpará suas recursos e parar, alguns não podem. Uma aplicação pode ser configurada para fazer algo completamente diferente quando um SIGTERM é recebido. Também se o aplicativo está em um estado ruim, como esperar por E / S de disco, pode não ser capaz de agir sobre o sinal que foi enviado.
A maioria dos administradores de sistema geralmente recorre ao mais abrupto sinalizar quando um aplicativo não responder a um SIGTERM:
kill -9 2563
O -9 informa ao comando kill que você deseja enviar sinal # 9, que é chamado SIGKILL. Com um nome assim, é óbvio que este sinal carrega um pouco mais de peso.
Embora o SIGKILL esteja definido no mesmo arquivo de cabeçalho de sinal que o SIGTERM, não pode ser ignorado pelo processo. Na verdade, o processo nem é tomou conhecimento do sinal SIGKILL desde que o sinal vai direto para o inicialização do kernel. Nesse ponto, o init interromperá o processo. O processo nunca tem a oportunidade de pegar o sinal e agir sobre ele.
No entanto, o kernel pode não conseguir matar o processo com sucesso em algumas situações. Se o processo estiver aguardando por E / S de rede ou disco, o kernel não poderá pará-lo. Processos e processos zumbis pego em um sono ininterrupto não pode ser interrompido pelo kernel, ou. Uma reinicialização é necessária para limpar esses processos do sistema.
Quando você enviou killall (SIGTERM) para os processos do thunderbird, solicitou que esses processos parassem. Alguns desses processos não estavam funcionando corretamente (provavelmente porque você precisava matá-los em primeiro lugar), então eles não poderiam atuar no sinal SIGTERM.