Egal, ob wir Anfänger oder Fortgeschrittene sind, früher oder später werden wir ein Rebellenprogramm oder einen Rebellenprozess finden, den wir mit Gewalt beenden müssen. In Windows sind wir es gewohnt, den Task-Manager zum Beenden von Prozessen zu verwenden. Heute werden wir uns darauf konzentrieren, wie ein Prozess in Linux beendet wird , für den wir die Konsole verwenden werden.
Das Terminal ist ein vielseitiges Werkzeug in Gnu / Linux-Umgebungen, und wir sollten es nicht kompliziert nennen, wir brauchen nur ein wenig Übung. Das manuelle Beenden eines Prozesses ist etwas sehr Häufiges und muss nicht gefährlich sein, wenn wir es richtig machen. Obwohl wir bedenken müssen, dass das Beenden von Prozessen, von denen das ordnungsgemäße Funktionieren des Betriebssystems abhängt, unerwartete Konsequenzen haben oder einen kritischen Fehler verursachen kann.
Kenntnis der Prozesse und ihrer Identifikation mit der PID.
Ein Prozess in Linux ist nichts anderes als ein Programm, das ausgeführt wird und dem eine Kennung zugewiesen wurde, die als PID bezeichnet wird. Die PID ist eine Abkürzung für Process ID , die sich auf die Prozesskennung bezieht. Jeder Prozess hat eine eindeutige PID.
Um eine detaillierte Liste aller Prozesse zu erhalten , können wir den Befehl ps aux
im Terminal ausführen. In der Liste der Prozesse sehen wir, dass eine der Spalten der PID entspricht, die ein ganzzahliger numerischer Wert ist.
Ich werde die Bedeutung der einzelnen Spalten nicht im Detail erläutern, aber ich möchte Sie daran erinnern, dass Sie den vorherigen Befehl mit grep
verknüpfen können, um schnell einen Prozess zu finden. Zum Beispiel können wir ps aux | grep apache
ps aux | grep apache
, um die Informationen des Apache-Serverprozesses zu finden.
Übergeordnete Prozesse und untergeordnete Prozesse unter Linux.
Wir müssen auch berücksichtigen, dass Prozesse andere Prozesse ausführen können , die als untergeordnete Prozesse bezeichnet werden. Die untergeordneten Prozesse haben eine eigene PID, gleichzeitig wird ihnen jedoch die PPID- Kennung (Parent Process Identifier) zugewiesen, die die PID des übergeordneten Prozesses angibt.
Unter Berücksichtigung ps -ef
übergeordneten und ps -ef
Prozessen müssen wir auch den Befehl ps -ef
kennen, der uns die PPID-Werte ps -ef
.
Befehle und Tools zum Beenden von Prozessen unter Linux.
Lassen Sie uns über den Befehl kill sprechen, der normalerweise beim Stoppen von Prozessen am häufigsten vorkommt. Der Befehl kill
kann das Signal als Argument verwenden, das an den Prozess gesendet wird, um ihn zu beenden, anzuhalten, fortzusetzen oder auszusetzen. Die Namen dieser Signale mit ihrem entsprechenden numerischen Wert lauten wie folgt:
- SIGINT – 2 : Dieses Signal unterbricht einen Vorgang, der dem Drücken der Tastenkombination
Ctrl + C
- SIGKILL – 9 : Bricht einen Prozess dauerhaft ab (kann nicht wiederhergestellt werden) .
- SIGTERM – 15 : unterbricht einen Prozess genau wie SIGINT, aber dieses Signal kann vom Prozess interpretiert werden. Wenn Sie den Befehl kill verwenden, ohne ein Signal anzugeben, wird dies standardmäßig verwendet.
- SIGCOUNT – 18 : Setzt einen gestoppten Prozess fort.
- SIGSTOP – 19 : Stoppt einen Prozess, entspricht dem Drücken der Tastenkombination
Ctrl + Z
Die oben genannten sind die häufigsten Signale, aber Sie können die vollständige Liste mit dem Befehl kill -l
überprüfen.
Wenn ein Prozess sofort beendet werden soll, lautet der Befehl kill -9 PID
oder der entsprechende kill -SIGKILL PID
. Verwenden Sie diejenige, an die Sie sich leichter erinnern können.
Beenden Sie Prozesse, indem Sie ihren Namen mit den Befehlen pkill und killall kennen.
Wenn wir den Namen des Prozesses anstelle seiner PID kennen, können wir den Befehl pkill
oder den Befehl killall
. Diese beiden Befehle sind ähnlich, aber nicht gleich.
Nach dem vorherigen Beispiel könnten wir einen Prozess mit pkill wie folgt pkill -9 nombreproceso
: pkill -9 nombreproceso
.
Ebenso gilt dies für den Befehl killall mit dem folgenden Beispiel: killall -9 nombreproceso
.
Hier können wir die Frage stellen, was passiert, wenn es mehrere Prozesse mit demselben Namen gibt und einer dieser Befehle ausgeführt wird . Die Antwort ist einfach: Dieser Befehl wirkt sich auf alle Prozesse aus, die den angegebenen Namen haben.
Unterschiede zwischen pkill und killall.
Der Befehl pkill verwendet ein Muster, um die Übereinstimmung mit dem Prozessnamen zu finden, während killall nach der genauen Übereinstimmung sucht. Um dies besser zu verstehen, wird der pkill -9 apache
Prozess pkill -9 apache
, wenn wir einen Prozess namens apache2
und den Befehl pkill -9 apache
verwenden. Wenn wir den Befehl killall -9 apache
, wird der Prozess apache2 nicht gestoppt (da killall den genauen Namen des Prozesses benötigt).
Andere Werkzeuge, Referenzen und Schlussworte.
Ich hoffe, dieses Tutorial hat Ihnen geholfen und jetzt kennen Sie die Möglichkeiten, die die Konsole unter Linux bietet, ein wenig genauer.
Ich muss Sie daran erinnern, dass wir im Blog bereits über das Tool fkill-cli gesprochen haben , mit dem Sie Prozesse interaktiv beenden können. Es gibt ein weiteres sehr ähnliches Tool, das jedoch in der Sprache Go geschrieben ist und den Namen Gkill trägt .
Ich möchte diese Gelegenheit auch nutzen, um auf einen Artikel im Forum zu verweisen, in dem es darum geht , gestoppte Jobs zu stoppen (Zombie-Prozesse im Hintergrund) .