Gibt es einen Unterschied zwischen
kill -9 212121
und
kill 212121
command-line
bash
user784637
quelle
quelle
kill -9
Antworten:
Die Ubuntu-Manpage für
kill
erklärt den Zweck des-9
Schalters (zugegebenermaßen ziemlich abgehackt):Hier ist, was eine andere Manpage sagt.
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 einfachesTERM
Signal reagiert, stirbt er, wenn einKILL
Signal gesendet wird.quelle
Der kill- Befehl sendet ein definiertes Signal an einen Prozess mit einer bestimmten Identität (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:
Der Unterschied zwischen
SIGTERM
undSIGKILL
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).quelle
Beachten Sie, dass alle der folgenden synonym sind:
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:
dem Programm an, dass der Benutzer die Verbindung getrennt hat (z. B. SSH-Sitzung oder Terminalfenster wurde geschlossen).
Normalerweise wird das Programm ordnungsgemäß heruntergefahren.
gesendet, wenn Sie CTRL+ C
drücken. Bedeutet normalerweise "Stop was Sie tun" - kann das Programm beenden oder nicht
Die Standardeinstellung, die von
kill
und gesendet wirdkillall
.Beendet normalerweise das Programm ... manchmal, nachdem das Programm beendet ist, was auch immer es tut.
gesendet, wenn Sie CTRL+ Z
drücken. Unterbricht das oben beschriebene Programm
dem Programm an, dass die Pipeline geschlossen wurde. Beendet normalerweise das Programm.
Zum Beispiel
cat /etc/passwd | head -n1
wird SIGPIPE an dencat
Prozess gesendet, nachdem die erste Zeile gedruckt wurde, und wirdcat
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.
quelle
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
quelle