In Linux ist jedes Programm und jeder Daemon ein „Prozess“. Die meisten Prozesse stellen ein einzelnes laufendes Programm dar. Andere Programme können andere Prozesse abspalten, beispielsweise Prozesse, die darauf warten, dass bestimmte Dinge passieren, und dann darauf reagieren. Und jeder Prozess benötigt eine bestimmte Menge an Speicher und Rechenleistung. Je mehr Prozesse Sie ausführen, desto mehr Arbeitsspeicher und CPU-Zyklen benötigen Sie. Auf älteren Systemen, wie meinem sieben Jahre alten Laptop, oder kleineren Computern, wie dem Raspberry Pi, können Sie das Beste aus Ihrem System herausholen, wenn Sie ein Auge darauf haben, welche Prozesse bei Ihnen im Hintergrund laufen.
Eine Liste der laufenden Prozesse erhalten Sie mit ps Befehl. Normalerweise solltest du ps geben einige Optionen, um mehr Informationen in der Ausgabe anzuzeigen. Ich verwende gerne das -e Option, um jeden Prozess zu sehen, der auf meinem System läuft, und das -f Option, um alle Details zu jedem Prozess zu erhalten. Hier sind einige Beispiele:
$ ps
PID TTY TIME CMD
88000 pts/0 00:00:00 bash
88052 pts/0 00:00:00 ps
88053 pts/0 00:00:00 head
$ ps -e | head
PID TTY TIME CMD
1 ? 00:00:50 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
6 ? 00:00:02 kworker/0:0H-events_highpri
9 ? 00:00:00 mm_percpu_wq
10 ? 00:00:01 ksoftirqd/0
11 ? 00:00:12 rcu_sched
12 ? 00:00:00 migration/0
$ ps -ef | head
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:51 ? 00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36
root 2 0 0 13:51 ? 00:00:00 [kthreadd]
root 3 2 0 13:51 ? 00:00:00 [rcu_gp]
root 4 2 0 13:51 ? 00:00:00 [rcu_par_gp]
root 6 2 0 13:51 ? 00:00:02 [kworker/0:0H-kblockd]
root 9 2 0 13:51 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 13:51 ? 00:00:01 [ksoftirqd/0]
root 11 2 0 13:51 ? 00:00:12 [rcu_sched]
root 12 2 0 13:51 ? 00:00:00 [migration/0]
Das letzte Beispiel zeigt die meisten Details. In jeder Zeile zeigt die UID (Benutzer-ID) den Benutzer an, dem der Prozess gehört. Die PID (Prozess-ID) stellt die numerische ID jedes Prozesses dar, und die PPID (Elternprozess-ID) zeigt die ID des Prozesses, der diesen hervorgebracht hat. In jedem Unix-System zählen die Prozesse ab PID 1 hoch, dem ersten Prozess, der ausgeführt wird, sobald der Kernel gestartet wird. Hier, systemd ist der erste Prozess, der kthreadd erzeugt hat . Und kthreadd erstellte andere Prozesse einschließlich rcu_gp , rcu_par_gp , und viele andere.
Prozessverwaltung mit dem kill-Befehl
Das System kümmert sich selbst um die meisten Hintergrundprozesse, sodass Sie sich nicht darum kümmern müssen. Sie sollten sich nur an der Verwaltung von Prozessen beteiligen müssen, die Sie erstellen, normalerweise durch Ausführen von Anwendungen. Während viele Anwendungen einen Prozess nach dem anderen ausführen (denken Sie an Ihren Musikplayer oder Terminalemulator oder Ihr Spiel), können andere Anwendungen Hintergrundprozesse erstellen. Einige davon werden möglicherweise weiter ausgeführt, wenn Sie die Anwendung beenden, damit sie beim nächsten Start der Anwendung schnell wieder an die Arbeit gehen können.
Die Prozessverwaltung ist ein Problem, wenn ich Chromium verwende, die Open-Source-Basis für Googles Chrome-Browser. Chromium arbeitet ziemlich hart an meinem Laptop und löst viele zusätzliche Prozesse aus. Im Moment sehe ich, dass diese Chromium-Prozesse mit nur fünf geöffneten Tabs ausgeführt werden:
$ ps -ef | fgrep chromium
jhall 66221 [...] /usr/lib64/chromium-browser/chromium-browser [...]
jhall 66230 [...] /usr/lib64/chromium-browser/chromium-browser [...]
[...]
jhall 66861 [...] /usr/lib64/chromium-browser/chromium-browser [...]
jhall 67329 65132 0 15:45 pts/0 00:00:00 grep -F chromium
Ich habe einige Zeilen ausgelassen, aber es gibt 20 Chromium-Prozesse und einen grep Prozess, der nach der Zeichenfolge „chromium.“
sucht$ ps -ef | fgrep chromium | wc -l
21
Aber nachdem ich Chromium beendet habe, bleiben diese Prozesse geöffnet. Wie können Sie sie herunterfahren und den Arbeitsspeicher und die CPU zurückgewinnen, die diese Prozesse belegen?
Das töten Mit dem Befehl können Sie einen Prozess beenden. Im einfachsten Fall sagst du kill die PID dessen, was Sie stoppen möchten. Um beispielsweise jeden dieser Prozesse zu beenden, müsste ich kill ausführen Befehl gegen jede der 20 Chromium-Prozess-IDs. Eine Möglichkeit, dies zu tun, ist mit einer Befehlszeile, die die Chromium-PIDs abruft, und einer anderen, die kill ausführt gegen diese Liste:
$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}'
66221
66230
66239
66257
66262
66283
66284
66285
66324
66337
66360
66370
66386
66402
66503
66539
66595
66734
66848
66861
69702
$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids
$ kill $( cat /tmp/pids)
Die letzten beiden Zeilen sind der Schlüssel. Die erste Befehlszeile generiert eine Liste mit Prozess-IDs für den Chromium-Browser. Die zweite Befehlszeile führt kill aus Befehl gegen diese Liste von Prozess-IDs.
Einführung in den killall-Befehl
Eine einfachere Möglichkeit, mehrere Prozesse auf einmal zu stoppen, ist die Verwendung von killall Befehl. Wie der Name schon vermuten lässt, killall beendet alle Prozesse, die mit einem Namen übereinstimmen. Das bedeutet, dass wir diesen Befehl verwenden können, um alle unsere bösartigen Chromium-Prozesse zu stoppen. Das ist so einfach wie:
$ killall /usr/lib64/chromium-browser/chromium-browser
Aber sei vorsichtig mit killall . Dieser Befehl kann jeden Prozess beenden, der mit dem übereinstimmt, was Sie ihm geben. Deshalb verwende ich gerne zuerst ps -ef um meine laufenden Prozesse zu überprüfen, dann führe killall aus gegen den genauen Pfad zu dem Befehl, den ich stoppen möchte.
Sie können auch das -i verwenden oder --interaktiv Möglichkeit, killall zu fragen um Sie zu benachrichtigen, bevor es jeden Prozess stoppt.
killall unterstützt auch Optionen zum Auswählen von Prozessen, die älter als eine bestimmte Zeit sind, mit dem -o oder --älter-als Möglichkeit. Dies kann hilfreich sein, wenn Sie beispielsweise eine Reihe von Rogue-Prozessen entdecken, die seit mehreren Tagen unbeaufsichtigt ausgeführt werden. Oder Sie können Prozesse auswählen, die jünger als eine bestimmte Zeit sind, z. B. außer Kontrolle geratene Prozesse, die Sie kürzlich gestartet haben. Verwenden Sie das -y oder --jünger-als Möglichkeit, diese Prozesse auszuwählen.
Andere Möglichkeiten, Prozesse zu verwalten
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Das Prozessmanagement kann ein wichtiger Bestandteil der Systemwartung sein. In meiner frühen Karriere als Unix- und Linux-Systemadministrator war die Möglichkeit, entgangene Jobs zu beenden, ein nützliches Werkzeug, um Systeme ordnungsgemäß am Laufen zu halten. Auf einem modernen Linux-Desktop müssen Sie möglicherweise keine Rogue-Prozesse beenden, aber wissen, dass kill und killall kann Ihnen helfen, wenn die Dinge irgendwann schief gehen.
Sie können auch nach anderen Möglichkeiten zum Verwalten von Prozessen suchen. In meinem Fall musste ich kill nicht wirklich verwenden oder killall um die Chromium-Hintergrundprozesse zu stoppen, nachdem ich den Browser beendet habe. Es gibt eine einfache Einstellung in Chromium, um dies zu steuern:
Dennoch ist es immer eine gute Idee, ein Auge darauf zu haben, welche Prozesse auf Ihrem System ausgeführt werden, und zu wissen, wie Sie sie bei Bedarf verwalten können.