Website-Suche

Alles, was Sie über Prozesse in Linux wissen müssen [Umfassender Leitfaden]


In diesem Artikel vermitteln wir ein grundlegendes Verständnis von Prozessen und schauen uns kurz an, wie man Prozesse unter Linux mithilfe bestimmter Befehle verwaltet.

Ein Prozess bezieht sich auf ein Programm in Ausführung; Es handelt sich um eine laufende Instanz eines Programms. Es besteht aus der Programmanweisung, aus Dateien gelesenen Daten, anderen Programmen oder Eingaben eines Systembenutzers.

Arten von Prozessen

Unter Linux gibt es grundsätzlich zwei Arten von Prozessen:

  • Vordergrundprozesse (auch als interaktive Prozesse bezeichnet) – diese werden über eine Terminalsitzung initialisiert und gesteuert. Mit anderen Worten: Es muss ein Benutzer mit dem System verbunden sein, um solche Prozesse zu starten; Sie wurden nicht automatisch als Teil der Systemfunktionen/-dienste gestartet.
  • Hintergrundprozesse (auch als nicht interaktive/automatische Prozesse bezeichnet) – sind Prozesse, die nicht mit einem Terminal verbunden sind; Sie erwarten keine Benutzereingaben.

Was sind Dämonen?

Hierbei handelt es sich um spezielle Arten von Hintergrundprozessen, die beim Systemstart starten und dauerhaft als Dienst ausgeführt werden. sie sterben nicht. Sie werden spontan als Systemaufgaben (als Dienste ausgeführt) gestartet. Sie können jedoch von einem Benutzer über den Init-Prozess gesteuert werden.

Erstellung eines Prozesses unter Linux

Ein neuer Prozess wird normalerweise erstellt, wenn ein vorhandener Prozess eine exakte Kopie von sich selbst im Speicher erstellt. Der untergeordnete Prozess hat dieselbe Umgebung wie sein übergeordneter Prozess, aber nur die Prozess-ID-Nummer unterscheidet sich.

Es gibt zwei herkömmliche Methoden zum Erstellen eines neuen Prozesses unter Linux:

  • Verwendung der System()-Funktion – diese Methode ist relativ einfach, jedoch ineffizient und birgt erhebliche Sicherheitsrisiken.
  • Verwendung der Funktionen fork() und exec() – diese Technik ist etwas fortgeschritten, bietet aber mehr Flexibilität, Geschwindigkeit und Sicherheit.

Wie identifiziert Linux Prozesse?

Da es sich bei Linux um ein Mehrbenutzersystem handelt, das heißt, dass verschiedene Benutzer verschiedene Programme auf dem System ausführen können, muss jede ausgeführte Instanz eines Programms vom Kernel eindeutig identifiziert werden.

Und ein Programm wird durch seine Prozess-ID (PID) sowie die ID seines übergeordneten Prozesses (PPID) identifiziert. Daher können Prozesse weiter in folgende Kategorien eingeteilt werden:

  • Übergeordnete Prozesse – Dies sind Prozesse, die zur Laufzeit andere Prozesse erstellen.
  • Untergeordnete Prozesse – diese Prozesse werden zur Laufzeit von anderen Prozessen erstellt.

Der Init-Prozess

Der Init-Prozess ist der Mutterprozess (übergeordnet) aller Prozesse auf dem System. Er ist das erste Programm, das beim Hochfahren des Linux-Systems ausgeführt wird. Es verwaltet alle anderen Prozesse im System. Es wird vom Kernel selbst gestartet, hat also grundsätzlich keinen übergeordneten Prozess.

Der Init-Prozess hat immer die Prozess-ID 1. Es fungiert als Adoptivelternteil für alle verwaisten Prozesse.

Sie können den pidof-Befehl verwenden, um die ID eines Prozesses zu ermitteln:

pidof systemd
pidof top
pidof httpd

Führen Sie Folgendes aus, um die Prozess-ID und die übergeordnete Prozess-ID der aktuellen Shell zu ermitteln:

echo $$
echo $PPID

Starten eines Prozesses unter Linux

Sobald Sie einen Befehl oder ein Programm ausführen (zum Beispiel cloudcmd – CloudCommander), startet es einen Prozess im System. Sie können einen (interaktiven) Vordergrundprozess wie folgt starten, er wird mit dem Terminal verbunden und ein Benutzer kann ihm Eingaben senden:

cloudcmd

Linux-Hintergrundjobs

Um einen Prozess im Hintergrund (nicht interaktiv) zu starten, verwenden Sie das Symbol &. Hier liest der Prozess die Eingaben eines Benutzers erst, wenn sie in den Vordergrund verschoben werden.

cloudcmd &
jobs

Sie können einen Prozess auch in den Hintergrund schicken, indem Sie ihn mit [Strg + Z] anhalten. Dadurch wird das Signal SIGSTOP an den Prozess gesendet und somit dessen Betrieb gestoppt. es wird untätig:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Um den oben angehaltenen Befehl weiterhin im Hintergrund auszuführen, verwenden Sie den Befehl bg:

bg

Um einen Hintergrundprozess in den Vordergrund zu schicken, verwenden Sie den Befehl fg zusammen mit der Job-ID wie folgt:

jobs
fg %1

Vielleicht gefällt Ihnen auch Folgendes: So starten Sie den Linux-Befehl im Hintergrund und trennen den Prozess im Terminal

Zustände eines Prozesses unter Linux

Während der Ausführung wechselt ein Prozess je nach Umgebung/Umständen von einem Zustand in einen anderen. Unter Linux hat ein Prozess die folgenden möglichen Zustände:

  • Läuft – hier läuft es entweder (es ist der aktuelle Prozess im System) oder es ist betriebsbereit (es wartet darauf, einer der CPUs zugewiesen zu werden).
  • Warten – in diesem Zustand wartet ein Prozess auf das Eintreten eines Ereignisses oder auf eine Systemressource. Darüber hinaus unterscheidet der Kernel auch zwischen zwei Arten von Warteprozessen; unterbrechbare Warteprozesse – können durch Signale unterbrochen werden und ununterbrechbare Warteprozesse – warten direkt auf Hardwarebedingungen und können durch kein Ereignis/Signal unterbrochen werden.
  • Gestoppt – In diesem Zustand wurde ein Prozess gestoppt, normalerweise durch den Empfang eines Signals. Zum Beispiel ein Prozess, der debuggt wird.
  • Zombie – hier ist ein Prozess tot, er wurde angehalten, hat aber immer noch einen Eintrag in der Prozesstabelle.

So zeigen Sie aktive Prozesse unter Linux an

Es gibt mehrere Linux-Tools zum Anzeigen/Auflisten laufender Prozesse auf dem System. Die beiden traditionellen und bekanntesten sind die Befehle ps und top:

1. ps-Befehl

Es zeigt Informationen zu einer Auswahl der aktiven Prozesse auf dem System an, wie unten dargestellt:

ps 
ps -e | head 

2. oben – Systemüberwachungstool

top ist ein leistungsstarkes Tool, das Ihnen eine dynamische Echtzeitansicht eines laufenden Systems bietet, wie im Screenshot unten gezeigt:

top 

Weitere Top-Anwendungsbeispiele finden Sie hier: 12 TOP-Befehlsbeispiele unter Linux

3. Blicke – Systemüberwachungstool

glances ist ein relativ neues Systemüberwachungstool mit erweiterten Funktionen:

glances

Eine umfassende Gebrauchsanleitung finden Sie hier: Glances – An Advanced Real Time System Monitoring Tool for Linux

Es gibt mehrere andere nützliche Linux-Systemüberwachungstools, mit denen Sie aktive Prozesse auflisten können. Öffnen Sie den Link unten, um mehr darüber zu erfahren:

  1. 20 Befehlszeilentools zur Überwachung der Linux-Leistung
  2. 13 weitere nützliche Linux-Überwachungstools

So steuern Sie Prozesse unter Linux

Linux verfügt auch über einige Befehle zur Steuerung von Prozessen wie kill, pkill, pgrep und killall. Nachfolgend finden Sie einige grundlegende Beispiele für deren Verwendung:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Um zu erfahren, wie Sie diese Befehle im Detail verwenden, um aktive Prozesse unter Linux zu beenden/beenden, öffnen Sie die folgenden Links:

  1. Eine Anleitung zu Kill-, Pkill- und Killall-Befehlen zum Beenden von Linux-Prozessen
  2. So finden und beenden Sie laufende Prozesse unter Linux

Beachten Sie, dass Sie sie verwenden können, um nicht reagierende Anwendungen unter Linux zu beenden, wenn Ihr System einfriert.

Senden von Signalen an Prozesse

Die grundlegende Möglichkeit, Prozesse in Linux zu steuern, besteht darin, ihnen Signale zu senden. Es gibt mehrere Signale, die Sie an einen Prozess senden können, um alle ausgeführten Signale anzuzeigen:

kill -l

Um ein Signal an einen Prozess zu senden, verwenden Sie die zuvor erwähnten Befehle kill, pkill oder pgrep. Aber Programme können nur dann auf Signale reagieren, wenn sie so programmiert sind, dass sie diese Signale erkennen.

Und die meisten Signale sind für die interne Verwendung durch das System oder für Programmierer beim Schreiben von Code bestimmt. Die folgenden Signale sind für einen Systembenutzer nützlich:

  • SIGHUP 1 – wird an einen Prozess gesendet, wenn sein steuerndes Terminal geschlossen ist.
  • SIGINT 2 – wird von seinem steuernden Terminal an einen Prozess gesendet, wenn ein Benutzer den Prozess durch Drücken von [Strg+C] unterbricht.
  • SIGQUIT 3 – wird an einen Prozess gesendet, wenn der Benutzer ein Beendigungssignal [Strg+D] sendet.
  • SIGKILL 9 – dieses Signal beendet (tötet) einen Prozess sofort und der Prozess führt keine Bereinigungsvorgänge durch.
  • SIGTERM 15 – Dies ist ein Programmbeendigungssignal (kill sendet dieses standardmäßig).
  • SIGTSTP 20 – wird von seinem steuernden Terminal an einen Prozess gesendet, um ihn zum Anhalten aufzufordern (Terminalstopp); initiiert durch Drücken von [Strg+Z] durch den Benutzer.

Im Folgenden finden Sie Beispiele für Kill-Befehle, um die Firefox-Anwendung mithilfe ihrer PID zu beenden, sobald sie einfriert:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Um eine Anwendung mithilfe ihres Namens zu beenden, verwenden Sie pkill oder killall wie folgt:

pkill firefox
killall firefox 

Ändern der Linux-Prozesspriorität

Auf dem Linux-System haben alle aktiven Prozesse eine Priorität und einen bestimmten Wert. Prozesse mit höherer Priorität erhalten normalerweise mehr CPU-Zeit als Prozesse mit niedrigerer Priorität.

Allerdings kann ein Systembenutzer mit Root-Rechten dies mit den Befehlen nice und renice beeinflussen.

Aus der Ausgabe des Befehls top zeigt die NI den Prozess-Nice-Wert an:

top  

Verwenden Sie den Befehl nice, um einen netten Wert für einen Prozess festzulegen. Bedenken Sie, dass normale Benutzer den Prozessen, die sie besitzen, einen guten Wert von null bis 20 zuordnen können.
Nur der Root-Benutzer kann negative Nice-Werte verwenden.

Um die Priorität eines Prozesses zu renice, verwenden Sie den Befehl renice wie folgt:

renice +8  2687
renice +8  2103

Schauen Sie sich unsere nützlichen Artikel zum Verwalten und Steuern von Linux-Prozessen an.

  1. Linux-Prozessmanagement: Booten, Herunterfahren und alles dazwischen
  2. Finden Sie die 15 wichtigsten Prozesse nach Speichernutzung mit „top“ im Batch-Modus
  3. Finden Sie die am häufigsten ausgeführten Prozesse nach höchster Speicher- und CPU-Auslastung unter Linux
  4. So finden Sie einen Prozessnamen mithilfe der PID-Nummer unter Linux

Das ist alles für jetzt! Haben Sie Fragen oder zusätzliche Ideen, teilen Sie uns diese über das unten stehende Feedback-Formular mit.