web-dev-qa-db-fra.com

Pourquoi le numéro 9 dans la commande kill -9 sous unix?

Je comprends que c'est hors sujet, je ne pouvais trouver nulle part en ligne et je pensais que les gourous de la programmation dans la communauté pourraient le savoir.
J'utilise habituellement

kill -9 pid

tuer le travail. Je me suis toujours demandé l’origine de 9. Je l’ai consultée en ligne, et il est écrit:

"9 Signifie que le signal KILL n'est ni capturable ni ignorable. En d'autres termes, il signalerait au processus (une application en cours d'exécution) de quitter immédiatement" (source: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

Mais pourquoi 9? et qu'en est-il des autres chiffres? y a-t-il une signification historique ou en raison de l'architecture d'Unix?

92
Alby

Voir article de Wikipédia sur les signaux Unix pour la liste des autres signaux. SIGKILL vient d’avoir le 9.

Vous pouvez aussi bien utiliser les mnémoniques que les chiffres:

kill -SIGKILL pid
83
Rafał Rawicki

Il y avait 8 autres signaux, ils sont venus avec le premier.

71
Jonathon Reinhart

Je pense qu'une meilleure réponse ici est simplement ceci:

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    

Quant à la "signification" de 9 ... je dirais qu'il n'y en a probablement pas. Selon interface de programmation Linux (p. 388) :

Chaque signal est défini comme un unique (petit) entier, commençant séquentiellement à partir de 1. Ces entiers sont définis avec des noms symboliques de la forme SIGxxxx. Puisque les nombres réels utilisés pour chaque signal varient d'une implémentation à l'autre , ce sont ces noms symboliques qui sont toujours utilisés dans les programmes.

46
mikewilliamson

Vous devez d’abord savoir ce que sont les signaux dans les systèmes de type Unix (cela ne prendra que quelques minutes).

Signals, sont des interruptions logicielles envoyées à un programme (en cours d'exécution) pour indiquer qu'un événement important s'est produit.

Les événements peuvent varier des demandes des utilisateurs aux erreurs d'accès illégal à la mémoire. Certains signaux, tels que le signal d'interruption, indiquent qu'un utilisateur a demandé au programme de faire quelque chose qui n'est pas dans le flux de contrôle habituel.

Il existe plusieurs types de signaux que nous pouvons utiliser - pour obtenir la liste complète de tous les signaux disponibles/possibles, utilisez la commande " $ kill -l": enter image description here

Dans la sortie ci-dessus, il est clairement visible que chaque signal a un ' numéro du signal' (par exemple 1, 2, 3) et un ' nom du signal' ( SIGUP, SIGINT, SIGQUIT) qui lui sont associés. Pour un aperçu détaillé de chaque signal, visitez ceci lien .

Enfin, pour en venir à la question "Pourquoi le numéro 9 dans kill -9 commande":

Il existe plusieurs méthodes pour transmettre des signaux à un programme ou à un script. Une des méthodes couramment utilisées pour envoyer le signal consiste à utiliser la commande kill - la syntaxe de base est la suivante:

$ kill -signal pid

Où signal est soit le numéro ou nom du signal, suivi du processus Id (pid) auquel le signal sera envoyé.

Par exemple - SIGKILL (ou 9), signal tue le processus immédiatement.

$ kill -SIGKILL 1001

et

$ kill -9 1001

les deux commandes sont une seule et même chose, c'est-à-dire que nous avons utilisé ci-dessus le "nom du signal" et, plus tard, le "numéro du signal".

Verdict: On a le choix librement d'utiliser le "nom du signal" ou le "numéro du signal" avec la commande kill.

29
Nabeel Ahmed

C'est une référence à "Revoulution 9" par les Beatles. Une collection de clips sonores et de bruits trouvés, cet enregistrement met en vedette John Lennon répétant sans cesse "Number 9, Number 9 ...". être en train de dire "Allume-moi, homme mort ..."

Par conséquent, le neuvième signal était destiné à être le signal le plus meurtrier.

18
Stairbob

Il existe une très longue liste de signaux Unix que vous pouvez visualiser sur Wikipedia . De manière quelque peu déroutante, vous pouvez réellement utiliser kill pour envoyer un signal à un processus. Par exemple, kill -SIGSTOP 12345 force le processus 12345 à suspendre son exécution, tandis que kill -SIGCONT 12345 lui dit de reprendre. Une version un peu moins cryptée de kill -9 est kill -SIGKILL.

7

Je ne pense pas que le chiffre 9 ait une signification. De plus, malgré les idées reçues, kill est utilisé non seulement pour tuer les processus, mais aussi pour envoyer un signal à un processus. Si vous êtes vraiment curieux, vous pouvez lire ici et ici .

4
Ilia Frenkel

SIGKILL utilise pour tuer le processus. SIGKILL ne peut être ni ignoré ni traité. Sous Linux, Façons de donner SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>
1
user9594626

pourquoi kill -9: le nombre 9 dans la liste des signaux a été choisi pour être SIGKILL en référence à "tuer les 9 vies d'un chat".

1
LaFleche78

il existe des processus qui ne peuvent pas être tués comme ceci "tuent% 1". si nous devons mettre fin à ce processus, une commande spéciale est utilisée pour tuer ce processus qui est kill -9. Par exemple, ouvrez vim et arrêtez-vous si vous utilisez ctrl + z, puis consultez les travaux et après avoir appliqué le processus kill, ce processus ne sera pas terminé. Nous utilisons ici la commande kill -9 pour mettre fin au processus.

0
Usman

Le -9 est le numéro de signal et spécifie que le message de neutralisation envoyé doit être du type KILL (non capturable, non ignorable).

kill -9 pid

Qui est le même que ci-dessous.

kill -SIGKILL pid

Sans spécifier un numéro de signal, la valeur par défaut est -15, qui est TERM (signal de fin du logiciel). Taper kill <pid> est le même que kill -15 <pid>.

0
Harini

Les deux sont identiques à kill -sigkill processID, kill -9 processID. Son essentiellement pour la résiliation forcée du processus.

0
Abhilash TC

Tapez la commande kill -l sur votre shell

vous constaterez qu’au 9ème numéro [9) SIGKILL], on peut donc utiliser kill -9 ou kill -SIGKILL

SIGKILL est sûr de tuer le signal, il ne peut pas être déplacé, ignoré ou manipulé. Il fonctionne toujours avec son comportement par défaut, qui consiste à tuer le processus.

0
Sandeep_black