GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwalten von Prozessen unter Linux mit kill und killall

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.


Linux
  1. Verwalten Sie Ihre angeschlossene Hardware unter Linux mit systemd-udevd

  2. Erstellen und Verwalten von Partitionen unter Linux mit parted

  3. Verwalten von Prozessen in Ubuntu Linux

  4. Finden (und beenden) Sie alte Prozesse

  5. Beste Möglichkeit, Zombie- und D-State-Prozesse in Linux zu beenden

Fkill – Interaktives Suchen und Beenden von Prozessen unter Linux

So finden und beenden Sie laufende Prozesse in Linux

So finden und beenden Sie einen Prozess mit einem Linux-Terminal

Meistern Sie den Linux-Kill-Prozess mit ps, pgrep, pkill und mehr

So beenden Sie Prozesse in Linux mit kill, killall und pkill

fuser Linux-Befehl mit Beispielen