Observe que todos os itens a seguir são sinônimos:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Vale a pena ressaltar que, no mundo da manipulação de sinais, o SIGKILL é um dos poucos únicos que são tratados pelo sistema operacional e não pelo programa. Quando você executa kill -9
, não está dizendo ao aplicativo para finalizar a si mesmo, em vez disso, está dizendo ao SO para parar de executar o programa, não importa o que o programa esteja fazendo.
Após o envio de SIGKILL , o programa será imediatamente interrompido. Se houver chamadas do kernel em execução (por exemplo, IO do Arquivo) em nome do programa, essas chamadas poderão ou não continuar até que sejam concluídas, dependendo da chamada, mas o programa em si não será mais executado. Observe que as tarefas rastreadas ou tarefas em execução em um depurador podem se comportar de maneira diferente aqui.
O outro sinal que não pode ser bloqueado é SIGSTOP que tem um efeito similar, mas congela o programa; você pode enviar SIGCONT mais tarde 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 manipulá-los da maneira que escolher, ou se ignorar o sinal, então um comportamento padrão é seguido.
Aqui estão alguns sinais úteis que você pode estar enviando para um processo:
-
SIGHUP - hangup
Informa ao programa que o usuário desconectou (por exemplo, a sessão SSH ou a janela do terminal foi fechada).
Geralmente faz um desligamento gracioso do programa.
-
SIGINT - interromper
Enviado quando você clica em CTRL + C
Normalmente significa "pare o que você está fazendo" - pode ou não matar o programa
-
SIGTERM - terminar
O padrão enviado por kill
e killall
.
Geralmente termina o programa ... às vezes depois que o programa termina o que está fazendo.
-
SIGSTOP - parar
Enviado quando você clica em CTRL + Z
Pausa o programa, discutido acima
-
SIGPIPE - tubo fechado
Diz ao programa que o pipeline foi fechado. Geralmente termina o programa.
Por exemplo, cat /etc/passwd | head -n1
enviará SIGPIPE ao processo cat
depois que a primeira linha for impressa, fazendo com que cat
termine antes de terminar o arquivo inteiro.
Enquanto todos esses sinais acontecem "naturalmente" em sua própria configuração, você pode usar o sinal para falsificar uma condição para alcançar o resultado desejado.
Por exemplo, se você quiser encerrar a sessão SSH de alguém, você pode simplesmente matar o processo, mas ao fazer isso você impedirá que ele atualize seu arquivo HISTORY, o que pode ser importante por razões de segurança. Mas se você enviar SIGHUP , o processo assumirá que a conexão morreu e executará sua limpeza padrão.