Por que o número 9 no comando kill -9 no Unix? [fechadas]

101

Eu entendo que está fora do tópico, não consegui encontrar em nenhum lugar online e estava pensando que talvez os gurus da programação na comunidade saibam disso.
Eu costumo usar

kill -9 pid

para matar o trabalho. Eu sempre me perguntei a origem de 9. Eu pesquisei online e dizia

"9 significa sinal KILL que não é capturável ou ignorável. Em outras palavras, sinalizaria o processo (algum aplicativo em execução) para encerrar imediatamente" (fonte: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

Mas, por que 9? e os outros números? existe algum significado histórico ou por causa da arquitetura do Unix?

Alby
fonte
6
Eu acho que esta questão pertence melhor ao superuser.com
Rafał Rawicki

Respostas:

89

Veja o artigo da Wikipedia sobre sinais Unix para a lista de outros sinais. SIGKILL acabou de obter o número 9.

Você também pode usar os mnemônicos, assim como os números:

kill -SIGKILL pid
Rafał Rawicki
fonte
6
Naquela época (quero dizer, 4.xBSD ou algo assim) você não podia usar os mnemônicos com o comando shell, e é por isso que o número 9 está escrito em uma quantidade terrível de scripts shell antigos de deck empoeirado.
zwol
72

Houve 8 outros sinais que eles encontraram primeiro.

Jonathon Reinhart
fonte
50

Acho que uma resposta melhor aqui é simplesmente esta:

mike@sleepycat:~☺  kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP  
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

Quanto ao "significado" de 9 ... Eu diria que provavelmente não há nenhum. De acordo com The Linux Programming Interface (p 388) :

Cada sinal é definido como um número inteiro único (pequeno), começando sequencialmente em 1. Esses números inteiros são definidos com nomes simbólicos na forma SIGxxxx. Como os números reais usados ​​para cada sinal variam entre as implementações , são esses nomes simbólicos que sempre são usados ​​nos programas.

Mikewilliamson
fonte
32

Primeiro você precisa saber o que são sinais em sistemas do tipo Unix (levará apenas alguns minutos).

Sinais são interrupções de software enviadas a um programa (em execução) para indicar que ocorreu um evento importante.

Os eventos podem variar de solicitações do usuário a erros de acesso ilegal à memória. Alguns sinais, como o sinal de interrupção, indicam que um usuário pediu ao programa para fazer algo que não está no fluxo normal de controle.

Existem vários tipos de sinais que podemos usar - para obter uma lista completa de todos os sinais disponíveis / possíveis, use o comando " $ kill -l ": insira a descrição da imagem aqui

Na saída acima é claramente visível, que cada sinal tem um ' número de sinal ' (por exemplo, 1, 2, 3) e um ' nome de sinal ' (por exemplo, SIGUP, SIGINT, SIGQUIT) associado a ele. Para uma pesquisa detalhada sobre o que cada Signal faz, visite este link .

Finalmente, chegando à pergunta "Por que o número 9 no comando kill -9 ":

Existem vários métodos de entrega de sinais a um programa ou script. Um dos métodos comumente usados ​​para enviar sinal é usar o comando kill - a sintaxe básica é:

$ kill -signal pid

Onde sinal é o número ou nome do sinal, seguido pelo Id do processo (pid) para o qual o sinal será enviado.

Por exemplo - -SIGKILL (ou -9 ), o sinal mata o processo imediatamente.

$ kill -SIGKILL 1001

e

$ kill -9 1001

ambos os comandos são a mesma coisa, ou seja, acima usamos o 'nome do sinal' e, mais tarde, usamos o 'número do sinal'.

Veredicto : Há uma escolha em aberto se usar o 'nome do sinal' ou 'número do sinal' com o comando kill .

Nabeel Ahmed
fonte
19

É uma referência a "Revoulution 9" dos Beatles. Uma coleção de clipes de som amarrados e ruídos encontrados, esta gravação apresenta John Lennon repetindo continuamente "Número 9, Número 9 ..." Além disso, essa música chamou mais atenção em 1969 quando foi descoberto que, quando tocada ao contrário, John parecia estar dizendo "Ligue-me, homem morto ..."

Portanto, o nono sinal estava destinado a ser o mais mortal dos sinais de morte.

Stairbob
fonte
17
Realmente não posso dizer se você está tirando isso da sua bunda, ou se há uma chance de que seja verdade.
Jonathon Reinhart
O final desse tópico é realmente épico, especialmente os dois comentários antes do meu. Também me deparei com aquele artigo sobre matar e qual sequência usar: pthree.org/2012/08/14/appr-use-of-kill-9-pid
Gull_Code
Eu quero tanto que isso seja verdade ... :)
nafas
A pessoa que diz 'número 9' não é Lennon. Suspeito que haja tanta verdade no resto da história (ou seja, nenhuma), mas quem sabe :)
Stephen Kennedy
8

Há uma lista muito longa de sinais Unix, que você pode ver na Wikipedia . Um tanto confuso, você pode usar killpara enviar qualquer sinal a um processo. Por exemplo, kill -SIGSTOP 12345força o processo 12345 a pausar sua execução, enquanto o kill -SIGCONT 12345informa para continuar. Uma versão um pouco menos enigmática de kill -9é kill -SIGKILL.

Lawrence Velázquez
fonte
2
A chamada de sistema subjacente que envia sinais também é chamada kill. Provavelmente porque o comportamento padrão para a maioria do conjunto original de sinais (números de 1 a 15) era encerrar o processo.
zwol
4

Não acho que haja qualquer significado para o número 9. Além disso, apesar da crença comum, killé usado não apenas para matar processos, mas também enviar um sinal para um processo. Se você estiver realmente curioso, pode ler aqui e aqui .

Ilia Frenkel
fonte
3

porque matar -9: o número 9 na lista de sinais foi escolhido como SIGKILL em referência a "matar as 9 vidas de um gato".

LaFleche78
fonte
3

SIGKILLuse para matar o processo. SIGKILLnão pode ser ignorado ou manipulado. No Linux, maneiras de dar SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>
KeyMaker00
fonte
1

Digite o comando kill -l em seu shell

você vai descobrir que no 9º número [ 9) SIGKILL ], então pode-se usar kill -9 ou kill -SIGKILL

SIGKILL é um sinal de morte seguro, não pode ser desposicionado, ignorar ou manipular. Sempre funciona com seu comportamento padrão, que é matar o processo.

Sandeep_black
fonte
1

O -9é o signal_number, e especifica que a mensagem kill enviada deve ser do tipo KILL (não capturável, não ignorável).

kill -9 pid

Qual é o mesmo abaixo.

kill -SIGKILL pid

Sem especificar um signal_number, o padrão é -15, que é TERM (sinal de terminação de software). Digitar kill <pid>é o mesmo que kill -15 <pid>.

Harini
fonte
0

Ambos são iguais a kill -sigkill processID, kill -9 processID. É basicamente para encerramento forçado do processo.

Abhilash TC
fonte
0

existem alguns processos que não podem ser eliminados como este "eliminar% 1". se tivermos que encerrar esse processo, um comando especial é usado para matar aquele processo que é kill -9. por exemplo, abra o vim e pare se estiver usando ctrl + z então veja as tarefas e depois de aplicar o processo kill, então este processo não será encerrado, então aqui usamos o comando kill -9 para encerrar.

Usman
fonte