Pourquoi le numéro 9 dans la commande kill -9 sous Unix? [fermé]

101

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

kill -9 pid

pour tuer le travail. Je me suis toujours demandé l'origine de 9. Je l'ai recherché en ligne et il est dit

"9 Signifie un signal KILL qui n'est ni capturable ni ignorable. En d'autres termes, cela signifierait au processus (une application en cours d'exécution) de se fermer 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 à cause de l'architecture d'Unix?

Alby
la source
6
Je pense que cette question appartient mieux à superuser.com
Rafał Rawicki

Réponses:

89

Voir l'article de wikipedia sur les signaux Unix pour la liste des autres signaux. SIGKILL vient juste d'obtenir le numéro 9.

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

kill -SIGKILL pid
Rafał Rawicki
la source
6
À l'époque (je veux dire 4.xBSD ou plus), vous ne pouviez pas utiliser les mnémoniques avec la commande shell, c'est pourquoi le numéro 9 est écrit dans un grand nombre de vieux scripts shell poussiéreux.
zwol
72

Il y avait 8 autres signaux qu'ils ont trouvé en premier.

Jonathon Reinhart
la source
50

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 l' interface de programmation Linux (p 388) :

Chaque signal est défini comme un (petit) entier unique, 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 selon les implémentations , ce sont ces noms symboliques qui sont toujours utilisés dans les programmes.

Mikewilliamson
la source
32

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

Les signaux 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 à des erreurs d'accès à la mémoire illégales. 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 une liste complète de tous les signaux disponibles / possibles, utilisez la commande " $ kill -l ": entrez la description de l'image ici

Dans la sortie ci-dessus, il est clairement visible que chaque signal a un « numéro de signal » (par exemple 1, 2, 3) et un « nom de signal » (par exemple SIGUP, SIGINT, SIGQUIT) qui lui est associé. Pour une recherche détaillée de ce que fait chaque signal, visitez ce lien .

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

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

$ kill -signal pid

Où le signal est le numéro ou le nom du signal, suivi de l'identifiant de processus (pid) auquel le signal sera envoyé.

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

$ kill -SIGKILL 1001

et

$ kill -9 1001

les deux commandes sont identiques, c'est-à-dire que ci-dessus, nous avons utilisé le «nom du signal», et plus tard, nous avons utilisé le «numéro du signal».

Verdict : On a le choix entre utiliser le «nom du signal» ou le «numéro du signal» avec la commande kill .

Nabeel Ahmed
la source
19

C'est une référence à "Revoulution 9" des Beatles. Une collection d'extraits sonores enchaînés et de bruits trouvés, cet enregistrement met en scène John Lennon répétant encore et encore "Number 9, Number 9 ..." dire "Allume-moi, homme mort ..."

Par conséquent, le neuvième signal était destiné à être le plus meurtrier des signaux de mise à mort.

Escalier
la source
17
Je ne peux vraiment pas dire si vous retirez cela de votre cul, ou s'il y a une chance que ce soit vrai.
Jonathon Reinhart
La fin de ce sujet est vraiment épique, en particulier les deux commentaires avant le mien. Je suis également tombé sur cet article sur kill et sur la séquence à utiliser: pthree.org/2012/08/14/appropriate-use-of-kill-9-pid
Gull_Code
Je veux tellement que ce soit vrai ... :)
nafas
La personne qui dit «numéro 9» n'est pas Lennon. Je soupçonne qu'il y a autant de vérité dans le reste de l'histoire (c'est-à-dire aucune) mais qui sait :)
Stephen Kennedy
8

Il existe une très longue liste de signaux Unix, que vous pouvez consulter sur Wikipedia . Un peu déroutant, vous pouvez en fait utiliser killpour envoyer n'importe quel signal à un processus. Par exemple, kill -SIGSTOP 12345force le processus 12345 à suspendre son exécution, tandis que lui kill -SIGCONT 12345dit de reprendre. Une version légèrement moins cryptique de kill -9is kill -SIGKILL.

Lawrence Velázquez
la source
2
L'appel système sous-jacent qui envoie des signaux est également appelé kill. Probablement parce que le comportement par défaut de la plupart des signaux d'origine (numéros 1 à 15) était de mettre fin au processus.
zwol
4

Je ne pense pas que le numéro 9 ait une signification. De plus, malgré la croyance commune, il killest utilisé non seulement pour tuer des processus, mais aussi pour envoyer un signal à un processus. Si vous êtes vraiment curieux, vous pouvez lire ici et ici .

Ilia Frenkel
la source
3

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

LaFleche78
la source
3

SIGKILLutiliser pour tuer le processus. SIGKILLne peut pas être ignoré ou manipulé. Sous Linux, des moyens de donner SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>
KeyMaker00
la source
1

Tapez la commande kill -l sur votre shell

vous trouverez cela au 9ème numéro [ 9) SIGKILL ], donc on peut utiliser soit kill -9 soit kill -SIGKILL

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

Sandeep_black
la source
1

Le -9est le signal_number, et spécifie que le message kill envoyé doit être du type KILL (non capturable, non ignorable).

kill -9 pid

Ce qui est le même que ci-dessous.

kill -SIGKILL pid

Sans spécifier de numéro_signal, la valeur par défaut est -15, qui est TERM (signal de terminaison du logiciel). Dactylographiekill <pid> est la même que kill -15 <pid>.

Harini
la source
0

Les deux sont identiques à kill -sigkill processID, kill -9 processID. C'est essentiellement pour l'arrêt forcé du processus.

Abhilash TC
la source
0

il y a un processus qui ne peut pas être tué comme celui-ci "kill% 1". si nous devons terminer ce processus, une commande spéciale est utilisée pour tuer ce processus qui est kill -9. par exemple, ouvrez vim et arrêtez si en utilisant ctrl + z puis voyez les travaux et après appliquer le processus de destruction, ce processus ne se terminera pas donc ici nous utilisons la commande kill -9 pour terminer.

Usman
la source