Was ist ein Prozess unter Linux?

Der Begriff Prozess ist für Personen ohne Informatik-Hintergrund oft unbekannt. Es wird jedoch häufig bei der Erörterung der Linux-Programmierung verwendet, und Prozesse sind für die Systemadministration von wesentlicher Bedeutung.

Linux verwendet den Begriff Job auch, um sich auf ein sehr ähnliches Konzept zu beziehen. Der Unterschied ist subtil, aber wichtig, und die Jobsteuerung ist ein nützliches Werkzeug beim Ausführen einer Multitasking-Umgebung. Sie können eine Reihe von Tools und integrierten Befehlen verwenden, um Jobs zu jonglieren.

Was ist ein Prozess?

Auf der einfachsten Ebene können Sie sich einen Prozess als das Äquivalent eines von Ihnen ausgeführten Programms vorstellen. Möglicherweise handelt es sich um eine vollständige GUI-Anwendung wie Ihren Webbrowser. Dies kann ein einzelner Befehl sein, den Sie in der Befehlszeile ausführen, z. B. ls . Im Großen und Ganzen hängt alles, was auf Ihrem Computer passiert, von einem Prozess ab.

In der Realität kann eine einzelne Anwendung viele Prozesse verwenden, um separate Aufgaben gleichzeitig auszuführen. Ein Befehlszeilenaufruf mit Pipes, z. B.:

 $ grep "error" log.txt | wc -l

Führt zwei separate Prozesse aus, einen für jedes Rohrsegment.

Wie Prozesse beginnen

Prozesse werden entweder explizit von Ihnen als Benutzer oder automatisch von Ihrem Computer selbst erstellt. Möglicherweise werden bereits Hunderte von Prozessen ausgeführt, sobald Sie hochgefahren sind.

Prozesse können andere Prozesse erzeugen und init, der erste Prozess, der auf vielen herkömmlichen Linux-Systemen gestartet wird, ist letztendlich dafür verantwortlich, jeden ausgeführten Prozess zu starten.

Wie Prozesse enden

Viele Prozesse sind kurzlebige Befehle, die eine Aufgabe ausführen und dann anhalten. Wenn Sie ls in ein Terminal eingeben, wird ein Prozess innerhalb von Sekundenbruchteilen gestartet, ausgeführt und gestoppt.

Einige Prozesse, wie z. B. Dämonen , werden kontinuierlich ausgeführt. Der Cron- Prozess führt beispielsweise regelmäßig andere Befehle aus, während der Host-Computer ausgeführt wird.

Einen Prozess identifizieren

Das Betriebssystem weist jedem Prozess eine eindeutige Kennung zu. Es ist als PID oder Prozess-ID bekannt. Dieser Wert ist normalerweise eine 1-5-stellige Zahl, und zukünftige Prozesse können die PID eines vorherigen Prozesses wiederverwenden, der vollständig bereinigt wurde.

PIDs werden vom Betriebssystem selbst auf viele verschiedene Arten verwendet. Ein gutes Beispiel ist das Verzeichnis / proc, in dem Informationen zu aktuell ausgeführten Prozessen gespeichert sind.

Verwandte: Was sind diese Ordner in Ihrem Linux-Stammverzeichnis?

Was ist ein Job?

In der Linux-Terminologie ist ein Job ein Programm, das von der Shell verwaltet wird. Es besteht normalerweise aus einem Prozess, kann jedoch mehrere verwenden. Wenn Sie einen Befehl in Ihr Terminal eingeben, wird ein Prozess zum Ausführen des Befehls erzeugt und ein Job erstellt, mit dessen Hilfe der Befehl während der Ausführung gesteuert werden kann.

Jobs verwalten

Wenn Sie einen Job im Vordergrund ausführen, können Sie ihn durch Drücken von Strg + C (^ C) unterbrechen. In der Regel wird dadurch der Prozess beendet und das Terminal an eine Eingabeaufforderung zurückgegeben.

 $ sleep 100
^C
$

Alternativ können Sie durch Drücken von Strg + Z (^ Z) den Job nicht ausführen, aber nicht beenden. Sie können sich das eher wie eine Pause vorstellen.

 $ sleep 100
^Z
[1]+ Stopped sleep 100
$

Beachten Sie, dass die Shell die Nummer des Jobs in eckigen Klammern anzeigt, wenn Sie ihn stoppen. Dies kann mit anderen Befehlen verwendet werden, um den Job zu steuern. Sie können beispielsweise einen Job neu starten, indem Sie ihn mit fg in den Vordergrund stellen:

 $ fg %1
sleep 100

Mit einem ähnlichen Befehl können Sie den Job im Hintergrund neu starten:

 $ bg %1
[1]+ sleep 100 &
$

Dadurch wird die Steuerung an eine Eingabeaufforderung zurückgegeben, sodass Sie andere Arbeiten ausführen können, während der Job ausgeführt wird. Wenn Sie möchten, dass ein Job im Hintergrund ausgeführt wird, sobald Sie ihn starten, fügen Sie am Ende des Befehls ein & hinzu :

 $ sleep 100 &
[1] 61087
$

In diesem Fall druckt die Shell die Auftragsnummer in Klammern und anschließend die PID.

Allgemeine Tools zum Abfragen von Prozessen und Jobs

Prozesse überwachen

Einer der nützlichsten Befehle, um Informationen über Prozesse zu erhalten, ist top . Das Programm zeigt eine interaktive Echtzeitansicht der laufenden Prozesse. Dies ist das Befehlszeilenäquivalent zu grafischen Programmen wie dem System Monitor von GNOME oder dem Windows Task-Manager.

Sie können das Top-Programm mit dem einfachen Befehl top starten:

Was ist ein Prozess unter Linux? - top screenshot

Ein Header-Bereich zeigt die CPU-Auslastung und die Speichernutzung an. Darunter zeigt oben eine Tabelle mit einem Prozess pro Zeile. Zu den Details gehören die PID, die verfügbare CPU-Leistung des Prozesses und die gesamte verbrauchte CPU-Zeit. Die Informationen werden standardmäßig alle drei Sekunden automatisch aktualisiert.

Es gibt viele Optionen und interaktive Befehle, mit denen das Verhalten von top geändert werden kann. Verwenden Sie den Befehl man top , um mehr zu lesen:

Was ist ein Prozess unter Linux? - top manpage

Schnappschuss von aktiven Prozessen erhalten

Der Befehl ps steht für Prozessstatus und listet Prozesse auf. Verschiedene Optionen ermöglichen verschiedene Filter und Anpassungen der angezeigten Details. Standardmäßig zeigt ps Prozesse an, die an ein Terminal angeschlossen sind und vom aktuellen Benutzer gestartet wurden. Mit anderen Worten, meistens Befehle, die Sie in die Befehlszeile eingegeben haben.

Wenn die frühere Aufgabe noch im Hintergrund ist, sieht die Ausgabe möglicherweise folgendermaßen aus:

 $ ps
PID TTY TIME CMD
35564 ttys000 0:00.00 sleep 100
73998 ttys000 0:00.43 -bash

Wie bei top hat ps viele Möglichkeiten, sein Verhalten zu steuern, und diese können über man ps entdeckt werden:

Was ist ein Prozess unter Linux? - ps manpage

Zwei der nützlichsten, die oft kombiniert werden, sind -e und -f . Sie zeigen Prozesse, die allen Benutzern gehören, bzw. zusätzliche Spalten. Beispielsweise:

 $ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2020 ? 00:11:22 /sbin/init
root 2 0 0 2020 ? 00:00:00 [kthreadd]
...

Auflisten von Hintergrundjobs

Der Befehl jobs listet Hintergrundjobs in der aktuellen Shell auf. Starten Sie im Hintergrund einen lang laufenden Job, um seine Verwendung zu demonstrieren:

 $ du -skh ~ >/tmp/du.txt 2>/dev/null &
[1] 61167

Dieser Befehl berechnet den gesamten von Ihrem Home-Verzeichnis verwendeten Speicherplatz und leitet dessen Ausgabe in eine temporäre Datei um.

 $ jobs
[1]+ Running du -skh ~ > /tmp/du.txt 2> /dev/null &

Nach Abschluss des Auftrags wird in Ihrem Terminal eine Zeile angezeigt, die wie folgt aussieht:

 [1]+ Exit 1 du -skh ~ > /tmp/du.txt 2> /dev/null

Senden von Signalen zum Beenden von Prozessen

Wenn Sie einen fehlerhaften Prozess festgestellt haben, müssen Sie ihn möglicherweise beenden. Obwohl es drastisch klingt, ist der Befehl kill ein normaler Bestandteil der Toolbox eines Systemadministrators. Es kann eines von mehreren Signalen senden, die Standardbenachrichtigungen zur Steuerung des Prozessverhaltens sind. Einige häufig zu sendende Signale sind SIGINT, SIGTSTP, SIGTERM und SIGKILL.

SIGINT entspricht dem Drücken von ^ C. SIGTSTP entspricht dem Drücken von ^ Z. SIGTERM und SIGKILL sind beide Mittel, um einen Prozess zu stoppen. Ersterer sendet eine Anfrage an den Prozess und gibt ihm die Möglichkeit, sich ordnungsgemäß herunterzufahren. Letzteres ist eine extremere Methode, um einen Prozess zum Beenden zu zwingen, und sollte als letzter Ausweg verwendet werden.

Der Befehl kill kann auch mit Jobs arbeiten. Beispielsweise:

 $ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated: 15 sleep 100

Lesen Sie mehr: Möglichkeiten, nicht reagierende Programme unter Linux zu beenden

Arbeiten mit Prozessen und Jobs unter Linux

Prozesse und Jobs sind knifflige Konzepte, insbesondere der Unterschied zwischen ihnen. Sie sind jedoch einer der ersten Schritte zum Verständnis der Systemadministration unter Linux. Jobs sind ein praktisches Mittel, um verschiedene Befehle gleichzeitig über die Shell auszuführen.

Prozesse sind ein untergeordnetes Konzept, das auch manipuliert werden kann und das Herzstück jedes Programms ist, das auf einem Computer ausgeführt wird.