Gibt es einen Unterschied zwischen
kill -9 212121
und
kill 212121
Gibt es einen Unterschied zwischen
kill -9 212121
und
kill 212121
Antworten:
Die Ubuntu-Manpage für kill
erklärt den Zweck des -9
Schalters (zugegebenermaßen ziemlich abgehackt):
Name Num Action Description
KILL 9 exit cannot be blocked
Hier ist, was eine andere Manpage sagt.
Der Befehl
kill
sendet das angegebene Signal an den angegebenen Prozess oder die angegebene Prozessgruppe. Wenn kein Signal angegeben ist, wird dasTERM
Signal gesendet. DasTERM
Signal bricht Prozesse ab, die dieses Signal nicht erfassen. Für andere Prozesse muss möglicherweise das SignalKILL
(9
) verwendet werden, da dieses Signal nicht abgefangen werden kann.
Die Verwendung des -9
Schalters stellt daher sicher, dass der Prozess effektiv beendet wird. Auch wenn ein eingefrorener oder nicht reagierender Prozess möglicherweise nicht auf ein einfaches TERM
Signal reagiert, stirbt er, wenn ein KILL
Signal gesendet wird.
Der kill- Befehl sendet ein definiertes Signal an einen Prozess mit einer bestimmten Identität (PID):
kill -<signal> <pid>
Natürlich können wir nur Prozesse beenden, die wir besitzen, während root alle Prozesse beenden kann. In Wikipedia finden Sie eine schöne Zusammenfassung der Rechensignale.
Signale kill
, die gesendet werden können, werden in der Manpage aufgelistet . Das Signal kann durch Name oder durch Nummer dargestellt werden. Wenn kein Signal gegeben wird, wird das Standard-Signal 15 resp. TERM
wird genutzt.
Alle drei folgenden Befehle sind daher identisch:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Der Unterschied zwischen SIGTERM
und SIGKILL
besteht darin, wie eine Anwendung auf das Signal reagieren kann:
TERM
: Eine Anwendung kann beendet werden, dh eine Shutdown-Routine ordnungsgemäß ausführen. KILL
: Die Anwendung wird sofort gestoppt und beendet (was in einigen Fällen zu Datenverlust oder einer Erhöhung des Apports führen kann, um einen vermuteten Absturz zu melden).Beachten Sie, dass alle der folgenden synonym sind:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Es ist erwähnenswert, dass SIGKILL in der Welt der Signalverarbeitung eine der wenigen einzigartigen Funktionen ist, die vom Betriebssystem und nicht vom Programm ausgeführt werden. Wenn Sie ausführen kill -9
, teilen Sie der Anwendung nicht mit, dass sie sich selbst beenden soll, sondern dass das Betriebssystem die Ausführung des Programms beenden soll, unabhängig davon, was das Programm gerade ausführt.
Nach dem Senden von SIGKILL wird das Programm sofort gestoppt. Wenn im Namen des Programms Kernel-Aufrufe ausgeführt werden (z. B. File IO), werden diese Aufrufe je nach Aufruf möglicherweise erst fortgesetzt, wenn sie beendet sind. Das Programm selbst wird jedoch nicht mehr ausgeführt. Beachten Sie, dass sich verfolgte Tasks oder Tasks, die unter einem Debugger ausgeführt werden, hier möglicherweise anders verhalten.
Das andere Signal, das nicht blockiert werden kann, ist SIGSTOP, das einen ähnlichen Effekt hat, aber stattdessen das Programm einfriert . Sie können SIGCONT später senden , um es fortzusetzen . Dieses Verhalten wird vollständig vom Betriebssystem gesteuert und das Programm erhält keine vorherige Benachrichtigung.
Alle anderen Signale werden an das Programm gesendet. es kann sie behandeln, wie es will, oder wenn es das Signal ignoriert, wird ein Standardverhalten befolgt.
Hier sind einige nützliche Signale, die Sie möglicherweise an einen Prozess senden:
kill
und gesendet wird killall
. cat /etc/passwd | head -n1
wird SIGPIPE an den cat
Prozess gesendet, nachdem die erste Zeile gedruckt wurde, und wird cat
beendet, bevor die gesamte Datei fertiggestellt ist.Während alle diese Signale "natürlich" in ihrer eigenen Einstellung auftreten, können Sie das Signal verwenden, um eine Bedingung vorzutäuschen, um das gewünschte Ergebnis zu erzielen.
Wenn Sie beispielsweise die SSH-Sitzung einer anderen Person beenden möchten, können Sie den Prozess einfach beenden. Auf diese Weise verhindern Sie jedoch, dass die HISTORY-Datei aktualisiert wird, was aus Sicherheitsgründen wichtig sein kann. Wenn Sie es jedoch SIGHUP senden, geht der Prozess davon aus, dass die Verbindung unterbrochen wurde , und führt die Standardbereinigung durch.
SIGQUIT
, wobei die Standardaktion darin besteht, den Core zu sichern und zu beenden. Dies kann verwendet werden, wenn ein Programm etwas sehr Falsches tut, Sie es sofort stoppen müssen und es später debuggen möchten.
kill -9 Bedeutung: Der Prozess wird vom Kernel abgebrochen. Dieses Signal kann nicht ignoriert werden. 9 bedeutet KILL-Signal, das nicht abgefangen oder ignoriert werden kann
Verwendung: SIGKILL Singal
Töten Bedeutung: Der Tötungsbefehl ohne Signal übergibt das Signal 15, wodurch der Vorgang auf normale Weise beendet wird.
Verwendung: SIGTERM- Signal, das von Programmierern verarbeitet werden kann
kill -9