Bash Man Page: töten <pid> vs töten -9 <pid> </pid></pid>

28069
sixtyfootersdude

Meine Manpage dokumentiert den Unterschied nicht

kill <pid> 

und

kill -9 <pid> 

Da diese verschiedenen Dinge tun, warum ist die -9 nicht in der dokumentierten killmanpage? Ich dachte, dass es vielleicht ein Shell-spezifisches Ding war, also schaute ich auch in der bash-Manpage nach, aber kein Glück.

Bonusfrage: Was macht der -9?

25

3 Antworten auf die Frage

39
Mark Pim

killsendet einfach ein Signal an den angegebenen Prozess. Das -9sagt ihm, welches Signal gesendet werden soll.

Unterschiedliche Zahlen entsprechen unterschiedlichen gemeinsamen Signalen. SIGINTZum Beispiel ist es 2, um einen Prozess zu senden, sendet das SIGINTSignal den Befehl

$ kill -2 <pid> 

Die Manpage hier spezifiziert:

Das Standardsignal für kill ist TERM.

Die Manpage bietet auch eine Tabelle der Signale, die Sie senden können. Nach dieser Tabelle TERMist 15, sind diese also alle gleichwertig:

kill <pid> kill -15 <pid> kill -TERM <pid> 

Hinweis 9 ist das KILLSignal.

 Name Number Action ----------------------- ALRM 14 exit HUP 1 exit INT 2 exit KILL 9 exit this signal may not be blocked PIPE 13 exit POLL exit PROF exit TERM 15 exit [Default] USR1 exit USR2 exit VTALRM exit STKFLT exit may not be implemented PWR ignore may exit on some systems WINCH ignore CHLD ignore URG ignore TSTP stop may interact with the shell TTIN stop may interact with the shell TTOU stop may interact with the shell STOP stop this signal may not be blocked CONT restart continue if stopped, otherwise ignore ABRT 6 core FPE 8 core ILL 4 core QUIT 3 core SEGV 11 core TRAP 5 core SYS core may not be implemented EMT core may not be implemented BUS core core dump may fail  XCPU core core dump may fail XFSZ core core dump may fail 
Das Standardsignal (`kill `) ist TERM. heavyd vor 14 Jahren 8
Die Zahlen sind normalerweise, aber nicht immer, auf verschiedenen Unix-basierten Systemen gleich. Es ist besser, den Signalnamen zu verwenden. Verwenden Sie also kill-KILL anstelle von kill -9. mpez0 vor 14 Jahren 9
Ich würde hinzufügen, dass die Signale "KILL" und "STOP" sogenannte nicht einfangbare Signale sind. Das heißt, wenn ein "TERM" -Signal an einen Prozess gesendet wird, kann es diesen abfangen und verschiedene "Herunterfahren" -Operationen ausführen, die er ausführen muss. Das Signal 'KILL' stoppt den Vorgang sofort. Neo vor 14 Jahren 7
Am besten verwenden Sie zuerst das Standardsignal und nur -9, wenn der Standardwert nicht funktioniert. Der Grund dafür ist, dass -9 nicht abgefangen werden kann, sodass das Programm keine Möglichkeit zur Bereinigung hat. Die Dokumentation zu Signalen Ihres Systems finden Sie auch in "man 7 signal" Dennis Williamson vor 14 Jahren 5
7
Dennis Williamson

Das voreingestellte Signal ist TERM, wodurch das Programm abgetastet wird und vor dem Beenden eine Bereinigung durchführen kann. Ein Programm kann es auch ignorieren, wenn es so geschrieben ist.

Durch die Angabe von -9 oder KILL als Signal kann das Programm es nicht fangen, bereinigen oder ignorieren. Es sollte nur als letzter Ausweg verwendet werden.

Um die Liste der Nummern und Signalnamen in Bash anzuzeigen, verwenden Sie kill -l(letter ell).

4
irfan

Ich verwende Ubuntu Linux.

Kill-Befehle senden grundsätzlich ein Signal an den Prozess, um es zu beenden. Zur Vereinfachung komplexer Verhaltenserwartungen für das alltägliche Computing-Kill-Kommando gibt es verschiedene Optionen.

Wie oben erklärt, mit allen Kill-Nummern-Optionen, die seiner Definition entsprechen.

Ich möchte noch ein paar Zeilen hinzufügen.

 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  

Wie Sie oben sehen, gibt es alle Kill-Optionen, die Sie erhalten, wenn Sie Ubuntu Linux ausführen.

Bestimmte Kill-Signale sind jedoch in allen * NIX-Varianten üblich.

kill -9 ist die SIGKILL-Option und der Kernel kann dieses Signal nicht ignorieren, was bedeutet, dass er diese -9- oder SIGKILL-Option berücksichtigt und den Prozess sofort beendet. Denken Sie daran, dass dieser Prozess nicht von Anwendungsprogrammen verarbeitet werden kann.

Auf der anderen Seite sendet kill -15 ein SIGTERM-Signal, was bedeutet, dass der Prozess vor dem Beenden sauber heruntergefahren wird. Dies ist das Standardsignal.