Existe alguma diferença entre
kill -9 212121
e
kill 212121
Existe alguma diferença entre
kill -9 212121
e
kill 212121
Respostas:
A página de manual do Ubuntu kill
explica o propósito do -9
switch (reconhecidamente de uma maneira um tanto instável):
Name Num Action Description
KILL 9 exit cannot be blocked
Aqui está o que outra página de manual diz.
O comando
kill
envia o sinal especificado para o processo ou grupo de processos especificado. Se nenhum sinal for especificado, oTERM
sinal será enviado. OTERM
sinal matará processos que não captam esse sinal. Para outros processos, pode ser necessário usar o sinalKILL
(9
), pois esse sinal não pode ser capturado.
Portanto, o uso do -9
comutador garante que o processo seja efetivamente eliminado. Mesmo que um processo congelado ou sem resposta possa não responder a um TERM
sinal simples , ele morrerá quando for enviado um KILL
sinal.
O comando kill enviará um sinal definido para um processo com uma determinada identidade (PID):
kill -<signal> <pid>
É claro que só podemos matar processos que possuímos, enquanto o root pode matar todos os processos. Veja a Wikipedia para um bom resumo dos sinais de computação.
Os sinais que kill
podem ser enviados estão listados na página de manual . O sinal pode ser representado por nome ou número. Se nenhum sinal for dado, o sinal padrão 15 resp. TERM
é usado.
Todos os três comandos abaixo são, portanto, idênticos:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
A diferença entre SIGTERM
e SIGKILL
é a maneira como um aplicativo pode atuar no sinal:
TERM
: um aplicativo poderá terminar, ou seja, executar corretamente uma rotina de desligamento. KILL
: os aplicativos são interrompidos e eliminados imediatamente (o que pode levar à perda de dados ou ao aumento da comunicação para relatar uma falha presumida em alguns casos).Observe que todos os itens a seguir são sinônimos:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Vale ressaltar que, no mundo do tratamento de sinais, o SIGKILL é um dos poucos únicos tratados pelo sistema operacional e não pelo programa. Ao executar kill -9
, você não está dizendo para o aplicativo se encerrar, mas para o sistema operacional para parar de executar o programa, não importa o que o programa esteja fazendo.
Após o envio do SIGKILL , o programa será interrompido imediatamente. Se alguma chamada do kernel estiver em execução (por exemplo, E / S de arquivo) em nome do programa, essas chamadas poderão ou não continuar até serem concluídas, dependendo da chamada, mas o programa em si não será mais executado. Observe que as tarefas rastreadas ou executadas em um depurador podem se comportar de maneira diferente aqui.
O outro sinal que não pode ser bloqueado é o SIGSTOP, que tem um efeito semelhante, mas congela o programa; você pode enviar o SIGCONT posteriormente para continuar. Esse comportamento é completamente controlado pelo sistema operacional e o programa não recebe nenhuma notificação prévia.
Todos os outros sinais são enviados para o programa; ele pode lidar com eles da maneira que escolher ou, se ignorar o sinal, será seguido um comportamento padrão.
Aqui estão alguns sinais úteis que você pode estar enviando para um processo:
kill
e killall
. cat /etc/passwd | head -n1
, enviará o SIGPIPE para o cat
processo após a primeira linha ser impressa, causando cat
a finalização antes de terminar o arquivo inteiro.Embora todos esses sinais aconteçam "naturalmente" em sua própria configuração, você pode usá-lo para falsificar uma condição para alcançar o resultado desejado.
Por exemplo, se você deseja encerrar a sessão SSH de alguém, você pode simplesmente interromper o processo, mas, ao fazer isso, impedirá a atualização do arquivo HISTORY, o que pode ser importante por razões de segurança. Mas, em vez disso, se você enviar SIGHUP , o processo assumirá que a conexão morreu e executará sua limpeza padrão.
SIGQUIT
, onde a ação padrão é despejar o núcleo e finalizar. Isso pode ser usado se um programa está fazendo algo muito errado, você precisa interrompê-lo imediatamente e gostaria de poder depurá-lo mais tarde.
kill -9 Significado: O processo será morto pelo kernel; este sinal não pode ser ignorado. 9 significa que o sinal KILL não é alcançável ou ignorável
Usos: SIGKILL singal
Kill Significado: O comando kill sem nenhum sinal passa pelo sinal 15, que finaliza o processo da maneira normal.
Usos: sinal SIGTERM , que pode ser manipulado por programadores
kill -9