Grundlagen des Prozessmanagements unter Linux

Grundlagen des Prozessmanagements unter Linux

Zielsetzung

Erfahren Sie die Grundlagen des Prozessemanagements unter Linux

Betriebssystem- und Softwareversionen

  • Betriebssystem: - Alle Linux -Verteilungen

Anforderungen

  • Einige in diesem Tutorial genannte Programme erfordern Root -Zugriff

Schwierigkeit

EINFACH

Konventionen

  • # - Erfordert, dass gegebene Linux -Befehle entweder mit Root -Berechtigungen ausgeführt werden müssen
    direkt als Stammbenutzer oder durch Verwendung von sudo Befehl
  • $ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Einführung

Eine der Kernaktivitäten eines Systemadministrators ist die Überwachung und Interaktion mit den auf einer Maschine ausgeführten Prozesse. In diesem Tutorial werden Sie mit der Verwendung einiger grundlegender Tools vorgestellt, mit denen Sie diese wichtige Aufgabe erfüllen können.

Der PS -Befehl

PS ist eines der grundlegenden Programme, die bei der Prozessüberwachung verwendet werden Schnappschuss der Prozesse, die auf einer Maschine ausgeführt werden, in dem Sie den Befehl aufrufen. Lassen Sie es uns in Aktion sehen: Zuerst werden wir versuchen, es ohne Optionen auszuführen:

$ PS PID TTY TIME CMD 24424 PTS/0 00:00:00 BASH 24468 PTS/0 00:00:00 PS 

Wie Sie aus der obigen Ausgabe erkennen können, werden nur zwei Prozesse angezeigt: verprügeln mit einem PID (Prozess ID) 24424 Und ps selbst mit der PID 24468. Dies liegt daran ps Der Befehl zeigt Prozesse, die mit dem verbunden sind Uid des Benutzer, der den Befehl gestartet hat, und des Terminals, aus dem er aufgerufen wird.

Wie man diese Einschränkung überwindet? Verwendung der -A Option können wir machen ps um uns alle Prozesse zu zeigen, mit Ausnahme der Sitzungsleiter und die Prozesse, die nicht mit einem Terminal verbunden sind.

Ein Sitzungsleiter ist ein Prozess, der eine PID hat, die gleich ist Sid (Sitzungs -ID) der Sitzung, deren Sitzung (das erste) Mitglied ist. Wenn ein Prozess erstellt wird PID Von seinem ersten Mitglied nennen wir diesen Prozess a Sitzungsleiter. Versuchen wir zu rennen ps mit dem -A Option und überprüfen Sie die Ausgabe:

$ PS-A PID TTY TIME CMD 12466 TTY1 00:00:00 GNOME-Session-B 12480 TTY1 00:00:17 GNOME-SHELL 12879 TTY1 00:00:00 XWAYLAND 12954 TTY1 00:00:00 GSD-SOUND 12955 TTY1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111). 00:00:00 GSD-WACOM 12957 TTY1 00:00:00 GSD-XSETTINGS 12961 TTY1 00:00:00 GSD-A11Y-Keyboa 12962 Tty1 00:00:00 GSD-A11Y-Settin 12965 Tty1 00:00:00 -Clipboard 12966 Tty1 00:00:03 GSD-Color 12967 Ty1 00:00:00 GSD-DATETIME 12970 TTY1 00:00:00 GSD-Housekeepin 12971 Ty1 00:00 GSD-Keyboard 12972 Tty1 00:00:00 -Media-keys 12973 TTY1 00:00:00 GSD-MOUSE 12976 TTY1 00:00:00 GSD-ORIENTIONATION […] 

Die Ausgabe des Programms wurde abgeschnitten, aber Sie können leicht erkennen, dass es jetzt Prozesse enthält, die zu verschiedenen Terminals und Benutzern gehören. Die Ausgabe zeigt uns Informationen darüber PID in der ersten Spalte, Tty in dieser Sekunde, ZEIT Welches ist die kumulative Zeit, die die CPU für den Prozess verbracht hat, und CMD Welches ist der Befehl, der den Prozess gestartet hat.

Um eine noch reichere Ausgabe zu haben, können wir die hinzufügen -u Und -X Optionen: Ersteres sagt ps eine Auswahl durchführen von Benutzer-ID, Letztere weist das Programm an, auch Prozesse, die nicht mit einem Terminal verbunden sind, wie Dämonen einzuschließen:

$ PS -AUX User PID %cpu %mem vsz RSS TTY STAT START Time Command Root 1 0.0 0.2 223932 8708 ? SS Jul20 0:04/usr/lib/systemd/systemd-switched-root-system-deserialize 25 root 2 0.0 0.0 0 0 ? S Jul20 0:00 [KThreadd] Root 4 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S< Jul20 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? S Jul20 0:07 [rcu_sched] root 9 0.0 0.0 0 0 ? S Jul20 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S Jul20 0:04 [rcuos/0] root 11 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/0] root 12 0.0 0.0 0 0 ? S Jul20 0:00 [migration/0] root 13 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/0] root 14 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/1] root 16 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/1] root 17 0.0 0.0 0 0 ? S Jul20 0:00 [migration/1] root 18 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/1] root 20 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/1:0H] root 21 0.0 0.0 0 0 ? S Jul20 0:02 [rcuos/1] root 22 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/1] root 23 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/2] root 24 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/2] root 25 0.0 0.0 0 0 ? S Jul20 0:00 [migration/2] root 26 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/2] root 28 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/2:0H] [… ] egdoc 13128 0.0 0.1 74736 5388 ? Ss Jul20 0:00 /usr/lib/systemd/systemd --user egdoc 13133 0.0 0.0 106184 420 ? S Jul20 0:00 (sd-pam) egdoc 13143 0.0 0.1 218328 3612 ? Sl Jul20 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login [… ] 

Sie können sehen, dass viele neue Informationen hinzugefügt wurden. Die erste neue Spalte der Ausgabe ist %ZENTRALPROZESSOR: Dies zeigt die CPU -Nutzung des Prozesses, der als Prozentsatz ausgedrückt wird. Für die nächste Spalte wird auch ein Prozentsatz verwendet, %Mem, Dies zeigt den physischen Speicher auf der Maschine, die vom Prozess verwendet wird. VSZ ist die virtuelle Speichergröße des in KIB ausgedrückten Prozesses.

Der Stat Die Spalte verwendet einen Code, um den Prozesszustand auszudrücken. Wir werden hier nicht alle möglichen Zustände beschreiben, sondern erklären Sie einfach diejenigen, die in der obigen Ausgabe erscheinen (Sie können eine vollständige Übersicht haben, indem Sie die PS -Manpage konsultieren).

Lassen Sie uns den ersten Prozess in der Ausgabe untersuchen PID 1, Daher ist der erste Prozess, der vom Kernel gestartet wurde. Dies macht Sinn, wir können sehen, dass es ist systemd, Das relativ neue Linux -Init -System, das jetzt von fast allen Verteilungen übernommen wird. Erstens haben wir eine S was zeigt, dass der Prozess im Zustand von liegt unterbrechbarer Schlaf Das bedeutet, dass es untätig ist und aufwacht, sobald es eine Eingabe erhält. Der S, Stattdessen sagt uns, dass der Prozess a ist Sitzungsleiter.

Ein anderes Symbol, das nicht im ersten Raw erscheint, sondern in einigen anderen Prozessen Beschreibungen ist < Dies zeigt an, dass der Prozess eine hohe Priorität hat und daher eine niedrige Hübsch Wert (wir werden sehen, was ein guter Wert im relevanten Abschnitt dieses Tutorials ist). Ein l im Stat Spalte zeigt an, dass der Prozess multi-threaded ist und a + Zeichen, dass es sich in der Vordergrundprozessgruppe befindet.

Schließlich haben wir in der letzten Spalte die START Spalte, die die Zeit zeigt, die der Befehl begann.

Eine weitere schöne Option, die wir an die übergeben können ps Befehl ist , Welches ist die Kurzversion von --Format. Mit dieser Option können Sie die Ausgabe durch die Verwendung von Platzhaltern ändern und angeben, welche Spalten angezeigt werden sollen. Zum Beispiel Laufen:

$ ps -ax -o%u%p%n%c

Wird uns die geben BENUTZER Spalte zuerst (%u), gefolgt von der PID des Prozesses (%p), durch die Ni Spalte (%n), die die anzeigt Hübsch Ebene und schließlich durch die BEFEHL Spalte (%c):

Benutzer PID Ni Befehls root 1 0 systemd root 2 0 kthreadd root 4 -20 KWERKER/0: 0H Root 6 -20 mm_percpu_wq root 7 0 ksoftirqd/0 root 8 0 rcu_Sched Root 9 0 RCU_BH Root 10 0 Rcuos/0 root 11 0 rcuob /0 root 12 - Migration/0 root 13 - Watchdog/0 root 14 0 cpUHP/0 root 15 0 cpUHP/1 root 16 - Watchdog/1 Root 17 - Migration/1 Root 18 0 ksoftirqd/1 root 20 -20 KWERKER/ 1: 0H Root 21 0 rcuos/1 root 22 0 rcuob/1 root 23 0 cpUHP/2 root 24 - Watchdog/2 Root 25 - Migration/2 Root 26 0 ksoftirqd/2 

Verwenden von "Top", um dynamisch mit Prozessen zu interagieren

Während ps Gibt uns einen statischen Schnappschuss von Prozessen und deren Informationen zum Zeitpunkt des Ausführens, Spitze Gibt uns eine dynamische Ansicht der Prozesse, die in einem bestimmten Zeitintervall aktualisiert werden, das wir sowohl beim Starten des Programms als auch interaktiv angeben können (Standard ist 3 Sekunden).

TOP zeigt uns nicht nur eine dynamische Darstellung der laufenden Prozesse an: Wir können mit ihnen und mit dem Programm selbst interagieren, indem wir einige Schlüssel verwenden. Zum Beispiel drücken B Lassen Sie uns die Verwendung von kühnen Zeichen umschalten, D Lassen Sie uns einen Wert eingeben, um die Verzögerungszeit zu ändern, k Lassen Sie uns ein Signal an einen Prozess senden, indem wir für seine Aufgabe auffordern PID und für die Signal Code, mit Sigterm Standard sein.

Ändern Sie die Priorität von Prozessen mit Nizza und Renice

Wie wir bereits gesehen haben, hat jeder Prozess einen Priorität Zugewiesen, was angibt, wie viel der Prozess auf andere Prozesse warten muss, um Ressourcen frei zu haben, bevor er darauf zugreifen kann. Diese Priorität kann mit einem Wert angegeben werden -20 Zu 19. Je weniger der Wert ist, desto höchste Priorität des Prozesses. Dies kann zunächst kontraintuitiv erscheinen, aber sehen Sie es so: Je schöner der Prozess für andere Prozesse ist, desto mehr übertreffen sie es beim Zugriff auf die Ressourcen.

Aber wie können wir die Priorität eines Prozesses festlegen?? Wir können die verwenden Hübsch Programm zur Erfüllung der Aufgabe. Angenommen, Sie möchten ein Skript mit dem niedrigstmöglichen Prioritätswert ausführen: Sie würden es so vorbereiten:

$ nice -n 19 ./Skript.Sch

Sie können auch die Priorität eines Programms ändern, das bereits durch den Einsatz von durchgeführt wird Renice es kennt PID:

# Renice -n 15 PID

Wobei PID die Prozess -ID des Programms ist. Denken Sie daran, dass die Renice Der Befehl muss mit Stammberechtigungen ausgeführt werden.

Senden Sie Signale an Prozesse mit den Kill- und Killall -Befehlen

Wir können den Befehl Kill verwenden, um eine zu senden Signal zu einem Prozess, der uns gehört, oder zu jedem Prozess, wenn wir Wurzelberechtigungen haben. Die verschiedenen Signale, die wir senden können, werden durch eine Nummer identifiziert: Wir können diese Korrespondenzen leicht sehen, indem wir den Kill -Befehl mit dem ausführen -l Möglichkeit:

$ Kill -l 1) seufz 2) sigint 3) sigquit 4) sigill 5) sigtrap 6) sigabrt 7) sigbus 8) sigfpe 9) sigkill 10) sigusr1 11) sigsegv 12) sigusr2 13) sigalrm 15) Sigalmed 16) SigmaMper 16) ) Sigstkflt 17) Sigchld 18) Sigcont 19) Sigstop 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGULL 35) Sigrtmin+1 36) Sigrtmin+2 37) Sigrtmin+3 38) Sigrtmin+4 39) Sigrtmin+5 40) Sigrtmin+6 41) Sigrtmin+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 45) Sigrtmin+11 46) Sigrtmin+12 47) Sigrtmin+13 48) Sigrtmin+14 49) Sigrtmin+15 50) Sigrtmax-14 51) Sigrtmax-13 52) Sigrtmax-12 53) Sigrtmax-11 54) Sigrtmax-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-12 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX-SIGRTMAX-SIGRTMAX 

Wenn keine Option an die übergeben wird töten Befehl, standardmäßig sendet er eine Sigterm Signal auf den angegebenen Prozess, auf den letzteres auf verschiedene Weise reagieren könnte: Es kann sofort anhalten, versuchen.

Um das zu sendende Signal mit Kill anzugeben, führen wir den Befehl aus, gefolgt von einem Armaturenbrett und der Anzahl des zugesandten Signals. Zum Beispiel um a zu führen Sigkill Signal, wir sollten ausführen:

Töte -9 PID

Der Sigkill Signal, im Gegensatz zu Sigterm kann nicht vom Prozess gefangen werden, der nicht reagieren kann: Es wird einfach sofort beendet.

Ein weiteres Signal, das Sie oft sehen werden, ist Sigint Welches ist das Signal, das auf Tastatur Interrupt (Strg-C) gesendet wird. Es versucht auch, den Prozess auf anmutig zu beenden und kann vom Prozess ignoriert werden. Sigstop Und Sigcont wird jeweils die Ausführung eines Prozesses suspendieren und fortsetzen: erstere, wie Sigkill kann nicht gefangen oder ignoriert werden. Für eine vollständige Liste und Beschreibung der Signale können Sie das Handbuch für eine Handbuch konsultieren Signal (7) Betrieb:

Mann 7 Signal

Der alle töten Programm hat den gleichen Zweck wie töten, und wie Kill sendet eine Sigterm Signal, wenn kein anderer angegeben ist (diesmal mit dem --Signal Option), aber anstatt einen Prozess nach seinem zu verweisen PID, Es wird dies mit dem Befehlsnamen tun und alle Prozesse, die unter demselben ausgeführt werden, effektiv getötet.

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Bestes Systemüberwachungstool für Linux
  • Ubuntu 20.04 Systemüberwachung mit Conky -Widgets
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten
  • Linux -Leistungsoptimierung: Tools und Techniken
  • Ubuntu 22.04 Systemüberwachung mit Conky -Widgets
  • Kann Linux Viren bekommen?? Erforschung der Verwundbarkeit von Linux…
  • Linux -Download