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 killexplica o propósito do -9switch (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
killenvia o sinal especificado para o processo ou grupo de processos especificado. Se nenhum sinal for especificado, oTERMsinal será enviado. OTERMsinal 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 -9comutador 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 KILLsinal.
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 killpodem 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 SIGTERMe 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:
kille killall. cat /etc/passwd | head -n1, enviará o SIGPIPE para o catprocesso após a primeira linha ser impressa, causando cata 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