Bash Man Page: kill <pid> vs kill -9 <pid>

25

Meine Manpage dokumentiert nicht den Unterschied zwischen

kill <pid>

und

kill -9 <pid>

Da diese verschiedene Dinge tun, warum ist die -9 nicht in der killManpage dokumentiert? Ich dachte, es sei vielleicht ein Shell-spezifisches Ding, also habe ich auch in der Bash-Manpage nachgesehen, aber kein Glück.

Bonusfrage: Was macht die -9?

Sixtyfootersdude
quelle

Antworten:

40

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

Unterschiedliche Zahlen entsprechen unterschiedlichen gemeinsamen Signalen. SIGINTBeispiel: 2, um einen Prozess zu senden, gibt das SIGINTSignal den Befehl aus

$ kill -2 <pid>

Die Manpage hier spezifiziert:

Das Standardsignal für kill ist TERM.

Die Manpage enthält auch eine Tabelle mit Signalen, die Sie senden können. Nach dieser Tabelle TERMist 15, so dass diese alle gleichwertig sind:

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
Mark Pim
quelle
8
Das Standardsignal ( kill <pid>) ist TERM.
Heavyd
9
Die Nummern sind normalerweise, aber nicht immer, auf verschiedenen Unix-basierten Systemen gleich. Es ist besser, den Signalnamen zu verwenden. Das heißt, anstelle von kill -9, benutze kill-Kill.
mpez0
7
Ich würde hinzufügen, dass die KILLund STOPSignale sogenannte nicht abfangbare Signale sind. Das heißt, wenn ein TERMSignal an einen Prozess gesendet wird, kann er es abfangen und verschiedene "Abschalt" -Operationen ausführen, die er ausführen muss. Das KILLSignal stoppt den Vorgang sofort.
Neo
5
Es ist am besten, zuerst das Standardsignal zu verwenden und nur -9 zu verwenden, wenn das Standardsignal nicht funktioniert. Der Grund dafür ist, dass -9 nicht abgefangen werden kann, sodass das Programm keine Chance hat, aufzuräumen. Außerdem finden Sie in der Dokumentation für die Signale auf Ihrem Systemman 7 signal
Pausiert bis auf weiteres.
7

Das Standardsignal ist TERM, mit dem das Programm, das gerade beendet wird, es abfangen und vor dem Beenden eine Bereinigung durchführen kann. Ein Programm kann es auch ignorieren, wenn es so geschrieben ist.

Wenn Sie -9 oder KILL angeben, kann das Programm das Signal nicht abfangen, bereinigen oder ignorieren. Es sollte nur als letztes Mittel verwendet werden.

Verwenden Sie kill -l(Buchstabe ell) , um die Liste der Zahlen und Signalnamen in Bash anzuzeigen.

Bis auf weiteres angehalten.
quelle
4

Ich benutze Ubuntu Linux.

Kill-Befehle senden grundsätzlich ein Signal an die Verarbeitung, um es zu beenden. Zur Vereinfachung komplexer Verhaltenserwartungen im Alltag bietet der Befehl kill verschiedene Optionen.

Wie oben erklärt, mit allen der Definition entsprechenden Kill-Numbers-Optionen.

Ich möchte 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, sind dies alles Kill-Optionen, die Sie erhalten, wenn Sie Ubuntu Linux ausführen.

Bestimmte Kill-Signale sind jedoch allen * NIX-Varianten gemeinsam.

kill -9 ist die SIGKILL-Option und der Kernel kann dieses Signal nicht ignorieren. Dies bedeutet, dass die Option -9 oder SIGKILL beachtet wird und der Prozess sofort beendet wird. Denken Sie daran, dass dieser Prozess nicht von Anwendungsprogrammen verarbeitet werden kann.

kill -15 sendet dagegen das SIGTERM-Signal, dh es wartet, bis der Prozess ordnungsgemäß heruntergefahren wurde, bevor er beendet wird. Dies ist das Standardsignal.

irfan
quelle