Was ist ein Prozess
Ein Prozess, auch Task genannt, ist die laufende Form eines Programms. Programme werden auf der Festplatte gespeichert und Prozesse im Arbeitsspeicher ausgeführt. Prozesse haben eine Eltern/Kind-Beziehung. Ein Prozess kann ein oder mehrere Kinder hervorbringen. Mehrere Prozesse können parallel laufen.
Systemprozesse auflisten
Der Prozessstatus-Befehl (ps) listet die Prozesse auf, die Ihrer Shell zugeordnet sind.
# ps [options]
Für jeden Prozess zeigt der Befehl ps die PID an , die Terminalkennung (TTY ), die kumulative Ausführungszeit (TIME ) und den Befehlsnamen (CMD ). Listen Sie beispielsweise die derzeit laufenden Prozesse auf dem System mit dem Befehl ps auf.
# ps PID TTY TIME CMD 1442 pts/1 00:00:00 sudo 1448 pts/1 00:00:00 su 1449 pts/1 00:00:00 bash 1666 pts/1 00:00:00 ps
Der Befehl ps hat mehrere Optionen, mit denen Sie zusätzliche Prozessinformationen anzeigen können.
- -a :Druckt Informationen zu allen am häufigsten angeforderten Prozessen, mit Ausnahme von Prozessgruppenleitern und Prozessen, die keinem Terminal zugeordnet sind
- -e :Gibt Informationen über jeden gerade laufenden Prozess aus
- -f :Erzeugt eine vollständige Auflistung
- -l :Erzeugt eine lange Liste
- -o-Format :Schreibt Informationen gemäß der in einem Format angegebenen Formatspezifikation. Es können mehrere -o-Optionen angegeben werden. Die Formatspezifikation wird als die durch Leerzeichen getrennte Verkettung aller Formatoptionsargumente interpretiert.
Alle Prozesse auflisten
Verwenden Sie beispielsweise „ps -ef ‘ Befehl, um alle Prozesse aufzulisten, die derzeit auf dem System ausgeführt werden sollen.
# ps -ef | more
Hier,
- UID :Der Benutzername des Eigentümers des Prozesses
- PID :Die eindeutige Prozessidentifikationsnummer des Prozesses
- PPID :Die übergeordnete Prozessidentifikationsnummer des Prozesses
- STIME :Die Zeit, zu der der Prozess gestartet wurde (hh:mm:ss)
- TTY :Das steuernde Terminal für den Prozess. Beachten Sie, dass Systemprozesse (Daemons) ein Fragezeichen (?) anzeigen, das anzeigt, dass der Prozess ohne Verwendung eines Terminals gestartet wurde.
- ZEIT :Die kumulative Ausführungszeit für den Prozess
- CMD :Der Befehlsname, Optionen und Argumente
Beenden eines Prozesses
Es kann vorkommen, dass Sie einen unerwünschten Prozess beenden müssen. Ein Prozess könnte in eine Endlosschleife geraten sein oder sich aufgehängt haben. Sie können jeden Prozess, den Sie besitzen, beenden oder stoppen. Sie können die folgenden zwei Befehle verwenden, um einen oder mehrere Prozesse zu beenden:
– kill
– pkill
Die Befehle kill und pkill senden Signale an Prozesse, die sie zum Beenden anweisen. Jedes Signal hat eine Nummer, einen Namen und ein zugeordnetes Ereignis. Nachfolgend finden Sie einige der am häufigsten verwendeten Signale mit ihren Funktionen.
Nummer | Name | Beschreibung |
---|---|---|
1 | SIGHUP | Konfigurationsdatei neu laden |
2 | SIGNAL | Unterbrechen per Tastatur (ctrl+c) |
9 | SIGKILL | Prozess beenden |
15 | SIGTERM | Prozess sofort beenden. (Einen Prozess kontrolliert beenden, damit eine Bereinigung möglich ist) |
18 | SIGCONT | Mit STOP gestoppten Prozess fortsetzen |
19 | STOPP | Prozess stoppen |
Beenden eines Prozesses mit dem Kill-Befehl
Sie können jeden Prozess beenden, indem Sie das entsprechende Signal an den betreffenden Prozess senden. Der Kill-Befehl sendet standardmäßig Signal 15, das Beendigungssignal. Dieses Signal bewirkt, dass der Prozess ordnungsgemäß beendet wird. Der Kill-Befehl sendet ein Beendigungssignal an einen oder mehrere Prozesse. Die Syntax zur Verwendung des Kill-Befehls lautet wie folgt:
# kill [-signal] PIDsHinweis :Der Kill-Befehl beendet nur die Prozesse, die Ihnen gehören. Der Root-Benutzer kann den Kill-Befehl für jeden Prozess verwenden.
Sie müssen die PID des Prozesses kennen, bevor Sie ihn beenden können. Sie können entweder den Befehl ps oder pgrep verwenden, um die PID des Prozesses zu finden. Sie können auch mehrere Prozesse gleichzeitig beenden, indem Sie mehrere PIDs in einer einzigen Befehlszeile eingeben. Sehen wir uns ein Beispiel für den Kill-Befehl an. Wir würden den Prozess „sleep 400“ beenden, wie unten gezeigt.
# ps -ef | grep sleep root 1337 1218 0 07:33 pts/0 00:00:00 sleep 400
# kill -9 1337
# ps -ef | grep sleep #
Beenden eines Prozesses mit dem Befehl pkill oder killall
Alternativ können Sie den Befehl pkill oder killall verwenden, um ein Beendigungssignal an Prozesse zu senden.
# pkill [-options] PIDs
oder
# killall [-options] PIDs
Der Befehl pkill/killall erfordert die Angabe des Namens anstelle der PID des Prozesses. Verwenden Sie beispielsweise den Befehl pkill, um den dtmail-Prozess zu beenden.
# pkill dtmail # pgrep -l mail #
Erzwungenes Beenden eines Prozesses:Signal 9
Einige Prozesse ignorieren das Standardsignal 15, das der Kill-Befehl sendet. Wenn ein Prozess nicht auf Signal 15 antwortet, können Sie seine Beendigung erzwingen, indem Sie Signal 9 mit dem Befehl kill oder pkill verwenden.
# kill -9 PID
oder
# pkill -9 process_nameHinweis :Das Senden von Signal 15 beendet einen Prozess nicht unbedingt ordnungsgemäß. Erst wenn das Signal vom Prozess abgefangen wird, bereinigt es sich in Ordnung und stirbt. Wenn nicht, stirbt es einfach.