Die Linux PID

Sobald ein Prozess in einem Linux-System erstellt wird, erhält er eine neu generierte Nummer, die ihn für andere Anwendungen identifiziert. Dies ist die Prozess-ID (PID), die im gesamten System zur Verwaltung laufender Prozesse verwendet wird.

Wie funktionieren Linux Prozesse?

Der erste Prozess, den Linux startet, heißt systemd und hat die PID 0. Alle anderen Prozesse werden als Childs (deutsch: Kinder) von systemd gestartet, sozusagen Unterprozesse. Bei den ersten Prozessen handelt es sich in der Regel um Low-Level-Linux-Prozesse, um die du dich nicht kümmern musst, je weiter die man aber im Prozessablauf kommt, startet das System Prozesse auf Benutzerebene wie MySQL, Nginx oder Apache2 (und/oder andere Benutzeranwendungen).

Jeder Prozess hat auch eine PPID, die die PID des Elternteils speichert, von dem der Prozess erstellt wurde. Außerdem gibt es eine TTY, die die ID des Terminals speichert, mit dem du den Prozess gestartet hast, und eine UID, die die ID des Benutzers speichert, der ihn erstellt hat. Jeder Prozess, der kein TTY hat, wird normalerweise als Daemon bezeichnet. Dieser Begriff wird verwendet, um Systemprozesse zu bezeichnen, die im Hintergrund laufen und kein kontrollierendes Terminal haben.

Wenn ein Prozess beendet wird, steht die PID für einen anderen Prozess zur Verfügung. Jeder Prozess wird mit einem Exit-Code beendet, der normalerweise angibt, ob ein Fehler aufgetreten ist oder nicht. Der Exit-Code 0 ist ein sauberer Exit, alles darüber hinaus sind besondere Fehler. Auf der rechten Seite, ist eine Liste mit möglichen Linux Signal Codes.

Technisch gesehen sind PIDs ein wichtiger Teil der Linux-Namespaces. Namespaces verbergen bestimmte Teile des Systems vor Prozessen, die in anderen Namespaces laufen, was Containerisierungstools wie Docker erst ermöglicht. Bei Namespaces wird der PID-Baum an einem bestimmten Zweig abgeschnitten, und nur dieser Zweig wird dem containerisierten Prozess zugewiesen. Dieser Zweig startet von PID 1 aus neu, so dass es für den Container so aussieht, als würde er in einer völlig neuen Linux-Installation laufen.

Screenshot HTOP

Prozesse & PIDs ansehen

Um sich alle laufenden Linux Prozesse und dessen IDs anzusehen, kann man den Befehl ps -e eingeben.

Dieser Befehl gibt nun eine lange Liste von jedem laufenden Prozess aus:

Die Liste mit PIDs geht auf dieser Maschine noch einige Seiten lang, dass wäre zu viel für einen Screenshot.

Prozesse beenden

Normalerweise wirst du mit dem eigentlichen Prozess nicht viel tun haben, außer ihn abzuschalten, da du die Prozesserstellung nicht verwalten musst. (Das geschieht ja meist automatisch, wenn du einen Befehl oder ein Skript ausführst.) Der Befehl zum beenden dafür heißt kurz und bündig kill <PID>, welcher den Prozess mit der PID sucht und beendet. Beispiel: kill 29773

Das ist natürlich nicht der beste Weg, um Anwendungen zu beenden.

Stattdessen solltest du den Befehl service verwenden. Zum Beispiel, um nginx neu zu laden:

service nginx reload

Oder zum Beenden:

service nginx stop

PID Dateien

Eine Prozess-ID identifiziert einen Prozess nur so lange eindeutig, wie dieser Prozess läuft. Wenn du Nginx neu starten musst, kann es sein, dass er eine neue Prozess-ID erhält.

An dieser Stelle kommen die PID-Dateien ins Spiel: Sie sind eine Form der Kommunikation zwischen den Prozessen, d.h. eine Datei, in der die aktuelle PID eines bestimmten Prozesses gespeichert ist. Ein anderer Prozess kann diese Datei lesen und weiß so zum Beispiel, wie die PID von MySQL lautet. Wenn MySQL startet, schreibt es seine eigene PID in diese Datei, damit das ganze System sie sehen kann.

Normalerweise werden PID-Dateien in /var/run/ gespeichert, aber das ist nur gängige Praxis und nicht erforderlich, ähnlich wie Log-Dateien in /var/log/ gespeichert werden.

Bei den meisten Prozessen mit PID-Dateien wird immer nur ein Prozess gleichzeitig ausgeführt, was mit Hilfe von Lockfiles geschieht. Lockfiles sind eine Möglichkeit, Markierungen (eng: “Flags”) zu setzen, die es nur einem Prozess erlauben, gleichzeitig gestartet zu werden. Wenn ein Prozess wie Nginx startet, prüft er, ob das Lockfile vorhanden ist, und wenn nicht, wird er ganz normal gestartet. Wenn es aber bereits vorhanden ist, gibt Nginx einen Fehler aus und verweigert den Start.

administrator
X