Warum Nummer 9 im Befehl kill -9 unter Unix? [geschlossen]

101

Ich verstehe, dass es kein Thema ist, ich konnte nirgendwo online etwas finden und ich dachte, dass Programmiergurus in der Community dies vielleicht wissen könnten.
Ich benutze normalerweise

kill -9 pid

den Job zu töten. Ich habe mich immer gefragt, woher 9 stammt. Ich habe es online nachgeschlagen und es steht

"9 bedeutet KILL-Signal, das nicht abfangbar oder ignorierbar ist. Mit anderen Worten, es würde signalisieren, dass der Prozess (eine laufende Anwendung) sofort beendet wird" (Quelle: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

Aber warum 9? und was ist mit den anderen Zahlen? Gibt es eine historische Bedeutung oder aufgrund der Architektur von Unix?

Alby
quelle
6
Ich denke, dass diese Frage besser zu superuser.com gehört
Rafał Rawicki

Antworten:

89

Eine Liste anderer Signale finden Sie im Wikipedia-Artikel zu Unix- Signalen. SIGKILL hat gerade die Nummer 9 bekommen.

Sie können die Mnemonik ebenso wie die Zahlen verwenden:

kill -SIGKILL pid
Rafał Rawicki
quelle
6
Früher (womit ich 4.xBSD oder so meine) konnte man die Mnemonik nicht mit dem Shell-Befehl verwenden, weshalb die Nummer 9 in eine Menge alter Dusty-Deck-Shell-Skripte geschrieben wurde.
zwol
72

Es gab 8 andere Signale, die sie zuerst hatten.

Jonathon Reinhart
quelle
50

Ich denke, eine bessere Antwort hier ist einfach:

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    

Was die "Bedeutung" von 9 betrifft ... würde ich sagen, dass es wahrscheinlich keine gibt. Laut der Linux-Programmierschnittstelle (S. 388) :

Jedes Signal wird als eindeutige (kleine) Ganzzahl definiert, beginnend nacheinander mit 1. Diese Ganzzahlen werden mit symbolischen Namen der Form SIGxxxx definiert. Da die tatsächlichen Zahlen, die für jedes Signal verwendet werden, je nach Implementierung variieren , werden diese symbolischen Namen immer in Programmen verwendet.

Mikewilliamson
quelle
32

Zuerst müssen Sie wissen, was Signale in Unix-ähnlichen Systemen sind (dies dauert nur wenige Minuten).

Signale sind Software-Interrupts, die an ein (laufendes) Programm gesendet werden, um anzuzeigen, dass ein wichtiges Ereignis aufgetreten ist.

Die Ereignisse können von Benutzeranforderungen bis zu unzulässigen Speicherzugriffsfehlern variieren. Einige Signale, wie das Interrupt-Signal, zeigen an, dass ein Benutzer das Programm aufgefordert hat, etwas zu tun, das nicht im üblichen Steuerungsfluss liegt.

Es gibt verschiedene Arten von Signalen, die wir verwenden können. Um eine vollständige Liste aller verfügbaren / möglichen Signale zu erhalten, verwenden Sie den Befehl " $ kill -l ": Geben Sie hier die Bildbeschreibung ein

In der obigen Ausgabe ist deutlich zu erkennen, dass jedem Signal eine ' Signalnummer ' (z. B. 1, 2, 3) und ein ' Signalname ' (z. B. SIGUP, SIGINT, SIGQUIT) zugeordnet sind. Besuchen Sie diesen Link , um einen detaillierten Überblick über die Funktionen der einzelnen Signale zu erhalten .

Zum Schluss noch die Frage "Warum Nummer 9 im Befehl kill -9 ":

Es gibt verschiedene Methoden, um Signale an ein Programm oder Skript zu senden. Eine der am häufigsten verwendeten Methoden zum Senden von Signalen ist die Verwendung des Befehls kill. Die grundlegende Syntax lautet:

$ kill -signal pid

Dabei ist das Signal entweder die Nummer oder der Name des Signals, gefolgt von der Prozess-ID (pid), an die das Signal gesendet wird.

Beispiel: -SIGKILL (oder -9 ), Signal beendet den Prozess sofort.

$ kill -SIGKILL 1001

und

$ kill -9 1001

Beide Befehle sind dasselbe, dh oben haben wir den 'Signalnamen' und später die 'Signalnummer' verwendet.

Urteil : Man hat die freie Wahl, ob man mit dem Befehl kill den 'Signalnamen' oder die 'Signalnummer' verwendet .

Nabeel Ahmed
quelle
19

Es ist ein Hinweis auf "Revoulution 9" der Beatles. Eine Aufnahme von aneinandergereihten Soundclips und gefundenen Geräuschen. Diese Aufnahme zeigt John Lennon, der immer wieder "Nummer 9, Nummer 9 ..." wiederholt. Außerdem erregte dieses Lied 1969 weitere Aufmerksamkeit, als entdeckt wurde, dass John rückwärts gespielt schien zu sagen "Mach mich an, toter Mann ..."

Daher war das neunte Signal dazu bestimmt, das tödlichste der Tötungssignale zu sein.

Stairbob
quelle
17
Ich kann wirklich nicht sagen, ob du das aus deinem Arsch ziehst oder ob es eine Chance gibt, dass es wahr ist.
Jonathon Reinhart
Das Ende dieses Themas ist wirklich episch, insbesondere die beiden Kommentare vor mir. Ich bin auch auf diesen Artikel über Kill gestoßen und welche Sequenz ich verwenden soll: pthree.org/2012/08/14/eigniate-use-of-kill-9-pid
Gull_Code
Ich möchte so sehr, dass dies wahr ist ... :)
Nafas
Die Person, die 'Nummer 9' sagt, ist nicht Lennon. Ich vermute, es gibt genauso viel Wahrheit im Rest der Geschichte (dh keine), aber wer weiß :)
Stephen Kennedy
8

Es gibt eine sehr lange Liste von Unix-Signalen, die Sie auf Wikipedia anzeigen können . Etwas verwirrend ist, dass Sie tatsächlich killjedes Signal an einen Prozess senden können. Erzwingt beispielsweise, dass der kill -SIGSTOP 12345Prozess 12345 seine Ausführung unterbricht, während er kill -SIGCONT 12345angewiesen wird, fortzufahren. Eine etwas weniger kryptische Version von kill -9ist kill -SIGKILL.

Lawrence Velázquez
quelle
2
Der zugrunde liegende Systemaufruf, der Signale sendet, wird ebenfalls aufgerufen kill. Wahrscheinlich, weil das Standardverhalten für die meisten der ursprünglichen Signale (Nummern 1 bis 15) darin bestand, den Prozess zu beenden.
zwol
4

Ich glaube nicht, dass Nummer 9 eine Bedeutung hat. Außerdem wird sie trotz allgemeiner Überzeugung killnicht nur zum Beenden von Prozessen verwendet, sondern auch zum Senden eines Signals an einen Prozess. Wenn Sie wirklich neugierig sind, können Sie hier und hier lesen .

Ilia Frenkel
quelle
3

Warum -9 töten? Die Nummer 9 in der Liste der Signale wurde als SIGKILL in Bezug auf "Töte die 9 Leben einer Katze" ausgewählt.

LaFleche78
quelle
3

SIGKILLVerwenden Sie, um den Prozess zu beenden. SIGKILLkann nicht ignoriert oder behandelt werden. Unter Linux gibt es Möglichkeiten zu geben SIGKILL.

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

Geben Sie den Befehl kill -l in Ihre Shell ein

Sie werden feststellen, dass bei der 9. Nummer [ 9) SIGKILL ] man entweder kill -9 oder kill -SIGKILL verwenden kann

SIGKILL ist sicher ein Kill-Signal. Es kann nicht verschoben, ignoriert oder gehandhabt werden. Es funktioniert immer mit seinem Standardverhalten, das darin besteht, den Prozess abzubrechen.

Sandeep_black
quelle
1

Das -9ist die signal_number und gibt an, dass die gesendete Kill-Nachricht vom Typ KILL (nicht abfangbar, nicht ignorierbar) sein soll.

kill -9 pid

Welches ist das gleiche wie unten.

kill -SIGKILL pid

Ohne Angabe einer signal_number ist der Standardwert -15, was TERM (Software Termination Signal) ist. Die Eingabe kill <pid>ist die gleiche wie kill -15 <pid>.

Harini
quelle
0

Beide sind identisch mit kill -sigkill processID, kill -9 processID. Es ist im Grunde für die erzwungene Beendigung des Prozesses.

Abhilash TC
quelle
0

Es gibt einige Prozesse, die nicht so getötet werden können wie "kill% 1". Wenn wir diesen Prozess beenden müssen, wird ein spezieller Befehl verwendet, um den Prozess zu beenden, der kill -9 ist. Öffnen Sie z. B. vim und stoppen Sie, wenn Sie mit Strg + Z Jobs anzeigen und nach dem Anwenden des Kill-Prozesses dieser Prozess nicht beendet wird. Daher verwenden wir hier den Befehl kill -9 zum Beenden.

Usman
quelle