Prozesse und Signale

Veröffentlicht am:

Die wichtigsten Befehle zum Merken

  • ps — einen Prozess untersuchen.
  • kill -SIGNAL PID — einem Prozess ein Signal senden. Das Signal bestimmt die Wirkung.

Befehle und Optionen

Diese Befehle kommen im kurzen Beispiel unten vor. PID steht für die Prozess-ID, die du untersuchen oder steuern möchtest.

Befehl Bedeutung
ps -p "$process_pid" -o pid,stat,comm -p wählt die gespeicherte PID; -o legt die Spalten fest: Prozess-ID, Zustand und Programmname.
kill -STOP "$process_pid" Den Prozess anhalten.
kill -CONT "$process_pid" Den angehaltenen Prozess fortsetzen.
kill -TERM "$process_pid" Das Beenden anfordern. Die Anwendung kann das Signal behandeln und vor dem Ende aufräumen.
sleep 300 Einen einfachen Prozess starten, der 300 Sekunden (fünf Minuten) wartet.

Hinzu kommt Bash-Syntax: & startet einen Befehl im Hintergrund, $! enthält dessen PID und process_pid=$! speichert sie. "$process_pid" setzt den gespeicherten Wert in einen Befehl ein.

Die entscheidenden Konzepte

1. Ein Programm ist Code; ein Prozess ist eine laufende Instanz

Ein Programm liegt als Dateien auf dem Datenträger. Beim Start entsteht ein Prozess, mit Speicher und Zugriff auf Ressourcen wie Dateien oder Netzwerkverbindungen. Deine Shell, ein Webserver und eine Datenbank laufen als Prozesse. Eine Anwendung kann mehrere Prozesse verwenden.

Prozesse werden von etwas gestartet: deiner Shell, einer anderen Anwendung oder einem Dienstmanager. Danach können sie weiterlaufen und auf Arbeit warten.

2. Eine PID identifiziert einen Prozess

Linux weist jedem Prozess eine Prozess-ID (PID) zu. Damit untersuchst du genau diesen Prozess oder sendest ihm ein Signal. Wenn du dasselbe Programm zweimal startest, entstehen separate Prozesse mit unterschiedlichen PIDs.

Die PID identifiziert einen Prozess während seiner Existenz. Sie ist keine dauerhafte Anwendungskennung; Linux kann die Nummer später erneut vergeben.

3. Vorhanden bedeutet nicht funktionsfähig

Ein Prozess kann arbeiten, warten oder angehalten sein. Achte in der STAT-Spalte von ps zunächst auf den ersten Buchstaben:

  • R — laufend oder bereit: Der Prozess wird ausgeführt oder wartet auf CPU-Zeit.
  • S — schlafend: Er wartet auf ein Ereignis, etwa neue Arbeit oder einen Timer. Das ist häufig normal.
  • T — angehalten: Seine Ausführung ist ausgesetzt; ein Fortsetzungssignal kann sie wieder aufnehmen.

Das sind die ersten Zustände zum Merken, nicht alle möglichen Linux-Zustände. Ein vorhandener Prozess beweist keine funktionierende Anwendung. Ein Server kann existieren, ohne Anfragen zu beantworten.

4. Signale steuern oder benachrichtigen einen Prozess

kill sendet Signale und beendet nicht immer einen Prozess. SIGSTOP hält ihn an, ohne ihn zu entfernen. SIGCONT setzt ihn fort. SIGTERM fordert das Beenden an.

Eine Anwendung kann SIGTERM behandeln, um Arbeit abzuschließen und Ressourcen freizugeben. Sie muss dieses Aufräumen selbst implementieren. SIGKILL erzwingt dagegen das Ende, ohne dass die Anwendung das Signal behandeln kann. Merke dir diesen Unterschied, bevor du das Beenden erzwingst.

Ein kleines Beispiel

Optional: Verwende ein Bash-Terminal unter Linux. Administratorrechte sind nicht erforderlich. Führe diese Zeilen einzeln aus:

sleep 300 &
process_pid=$!
ps -p "$process_pid" -o pid,stat,comm
kill -STOP "$process_pid"
kill -CONT "$process_pid"
kill -TERM "$process_pid"

Die ersten beiden Zeilen starten einen Hintergrundprozess und speichern seine PID. ps sollte seine ID, meist den Zustand S und den Programmnamen sleep anzeigen. Die letzten drei Befehle halten ihn an, setzen ihn fort und fordern sein Ende an. Erfolgreiche Signalbefehle bleiben normalerweise ohne Ausgabe; Bash kann eine Änderung des Jobzustands melden.

Die letzte Zeile beendet den Beispielprozess. Falls du ihn angehalten zurücklässt, setze ihn vor dem Beenden fort. Ist er bereits fertig, ist „No such process“ zu erwarten. Ersetze seine PID nicht durch eine fremde.

Merke dir: Prozess finden, Zustand untersuchen und dann das passende Signal für deine Absicht wählen.