Init-Konzept: PID 1 und System-Start

Init-Konzept: PID 1 und System-Start

Der erste Prozess nach dem Kernel. Boot-Ablauf von /sbin/init zu Diensten. Kernel-Space, User-Space und die Rolle von PID 1.

Der Init-Prozess trägt immer die Prozess-ID 1 (PID 1). Nach dem Kernel-Start wird /sbin/init als erster User-Space-Prozess ausgeführt. Dieser Prozess läuft bis zum System-Shutdown und ist Vorfahre aller anderen Prozesse.

PID 1: Der erste Prozess

Der Kernel startet nach dem Bootloader und initialisiert Hardware, Speicher und Dateisysteme. Sobald das Root-Dateisystem gemountet ist, führt der Kernel /sbin/init aus. Dieser Prozess erhält automatisch die PID 1 - die niedrigste verfügbare Prozess-ID.

PID 1 hat besondere Eigenschaften im System:

Prozess-Vorfahrschaft:

Jeder neue Prozess wird als Kind eines existierenden Prozesses erstellt. PID 1 ist direkter oder indirekter Vorfahre aller Prozesse. Wenn ein Eltern-Prozess terminiert bevor seine Kinder beendet sind, übernimmt PID 1 die verwaisten Prozesse (Orphan-Prozesse).

Signal-Behandlung:

Normale Prozesse können durch Signals wie SIGTERM oder SIGKILL beendet werden. PID 1 ignoriert diese Signals standardmäßig - das System würde sonst beim versehentlichen Beenden des Init-Prozesses nicht mehr funktionieren. Nur ein sauberer Shutdown oder Reboot beendet PID 1.

System-Shutdown:

Beim Herunterfahren sendet der Kernel ein spezielles Signal an PID 1. Der Init-Prozess stoppt alle laufenden Dienste in kontrollierter Reihenfolge, unmountet Dateisysteme und signalisiert dem Kernel die Bereitschaft zum Shutdown.

Boot-Ablauf: Vom Kernel zu Diensten

Der System-Start folgt einer festen Abfolge:

1. Bootloader (GRUB, UEFI)

Der Bootloader lädt den Kernel in den Arbeitsspeicher und übergibt die Kontrolle. Boot-Parameter wie init=/sbin/init oder quiet werden an den Kernel übergeben.

2. Kernel-Initialisierung

Der Kernel erkennt und initialisiert die Hardware (CPU, RAM, Festplatten, Netzwerk). Er mountet das Root-Dateisystem und sucht nach /sbin/init. Ohne Init-Prozess startet eine Kernel-Panic - das System bleibt unbrauchbar.

3. Init-Start (PID 1)

/sbin/init wird ausgeführt und erhält PID 1. Der Init-Prozess liest seine Konfiguration - bei systemd /etc/systemd/system/, bei SysV-Init /etc/inittab, bei OpenBSD /etc/rc.conf. Basierend auf dieser Konfiguration startet Init weitere Prozesse.

4. Frühe System-Dienste

Kritische System-Dienste starten zuerst: udev (Device-Management), Dateisystem-Checks, Hostname-Konfiguration. Diese Dienste bereiten das System für komplexere Services vor.

5. Netzwerk-Dienste

Nach der Netzwerk-Initialisierung starten netzwerkabhängige Dienste: SSH-Server, Webserver, Datenbanken. Die Start-Reihenfolge hängt von Abhängigkeiten ab - ein Webserver benötigt ein funktionierendes Netzwerk.

6. Login-Manager

Zuletzt wird der Login-Prozess gestartet - bei Server-Systemen getty auf den Konsolen, bei Desktop-Systemen ein grafischer Display-Manager.

Der gesamte Boot-Prozess dauert auf moderner Hardware zwischen 5 und 30 Sekunden. systemd startet Dienste parallel, was den Boot beschleunigt. SysV-Init startet sequenziell - länger, aber transparenter.

Kernel-Space vs. User-Space

Unix-Systeme trennen strikt zwischen Kernel-Space und User-Space. Diese Trennung schützt das System vor fehlerhaften Programmen.

Kernel-Space:

Der Kernel läuft mit höchsten Privilegien und direktem Hardware-Zugriff. Er verwaltet CPU-Zeit, Speicher, Dateisysteme und Netzwerk. Code im Kernel-Space kann das gesamte System crashen - ein Fehler im Netzwerk-Treiber führt zu Kernel-Panic.

User-Space:

Alle normalen Programme laufen im User-Space mit eingeschränkten Rechten. Sie greifen nur über System-Calls auf Kernel-Funktionen zu. Ein abgestürztes Programm im User-Space beendet nur diesen Prozess - das System läuft weiter.

Init als Brücke:

Der Init-Prozess ist der erste User-Space-Prozess. Er startet mit Root-Rechten, läuft aber im User-Space. Über System-Calls kommuniziert Init mit dem Kernel - zum Beispiel beim Starten neuer Prozesse (fork(), exec()), beim Ändern von Berechtigungen (setuid()) oder beim Senden von Signals (kill()).

Diese Trennung macht Unix-Systeme stabil. Ein fehlerhafter Dienst crasht nicht das gesamte System, weil er im User-Space isoliert läuft. Nur der Kernel kann direkten Hardware-Schaden verursachen.

/sbin/init: Das ausführbare Init-Programm

/sbin/init ist der Pfad zur ausführbaren Init-Datei. Was genau hinter diesem Pfad liegt, unterscheidet sich zwischen Systemen:

systemd:

/sbin/init ist meist ein Symlink auf /lib/systemd/systemd. Das systemd-Binary ist komplex und bietet umfangreiche Features: Service-Management, Logging (journald), Timer (Alternative zu cron), Netzwerk-Konfiguration (networkd).

SysV-Init:

Die klassische Init-Implementation ist ein kleines C-Programm. Es liest /etc/inittab und führt die dort definierten Befehle aus. SysV-Init delegiert die meiste Arbeit an Shell-Scripte in /etc/init.d/.

OpenBSD:

/sbin/init ist Teil des Basis-Systems und extrem minimalistisch. Es startet /etc/rc beim Boot, /etc/rc.shutdown beim Herunterfahren. Die eigentliche Service-Verwaltung erfolgt durch Shell-Scripte.

Alternative Init-Systeme:

Manche Systeme nutzen andere Init-Implementationen: runit, OpenRC, s6. Der Kernel-Parameter init= kann beim Boot einen alternativen Init-Prozess angeben: init=/sbin/runit oder init=/bin/bash (für Notfall-Recovery).

Init als Prozess-Hierarchie-Wurzel

Die Prozess-Hierarchie eines Unix-Systems ist baumartig strukturiert. PID 1 ist die Wurzel dieses Baums.

Prozess-Beziehungen:

Jeder Prozess kennt seinen Eltern-Prozess (Parent Process ID, PPID). Der Befehl ps -ef zeigt diese Hierarchie:

UID   PID  PPID  CMD
root    1     0  /sbin/init
root  234     1  /usr/sbin/sshd
root  456   234  sshd: user@pts/0
user  789   456  -bash
user  890   789  ps -ef

PPID 0 bedeutet: Vom Kernel gestartet. PID 1 hat PPID 0. Alle anderen Prozesse haben PID 1 oder dessen Nachkommen als Eltern.

Orphan-Prozesse:

Wenn ein Prozess terminiert bevor seine Kind-Prozesse beendet sind, werden diese zu Orphan-Prozessen. Der Kernel weist ihnen automatisch PID 1 als neuen Eltern-Prozess zu. Init übernimmt die Verantwortung und wartet auf deren Terminierung (wait() System-Call).

Zombie-Prozesse:

Ein beendeter Prozess dessen Exit-Status noch nicht vom Eltern-Prozess abgeholt wurde, existiert als Zombie-Prozess. Diese Prozesse belegen keine Ressourcen außer einem Eintrag in der Prozess-Tabelle. PID 1 räumt Zombie-Prozesse auf, deren Eltern-Prozesse nicht mehr existieren.

Init-System-Philosophien im Vergleich

Init-Systeme unterscheiden sich fundamental in ihrer Philosophie. Diese Unterschiede betreffen Komplexität, Features und Transparenz.

systemd-Ansatz:

Umfassendes System-Management in einem Binary. Paralleler Service-Start beschleunigt den Boot. Deklarative Konfiguration in Unit-Files definiert Abhängigkeiten. Socket-Activation startet Dienste bei Bedarf. Binäre Logs ermöglichen strukturierte Abfragen. Dieser Ansatz integriert viele System-Funktionen unter einem Dach.

SysV-Init-Ansatz:

Minimales Init-System delegiert Arbeit an Shell-Scripte. Sequenzieller Start ist langsam aber vorhersehbar. Text-basierte Konfiguration ist transparent und editierbar. Runlevels definieren verschiedene System-Zustände. Dieser Ansatz bevorzugt Einfachheit und Unix-Philosophie.

BSD-Ansatz:

Minimale Komplexität mit klaren Verantwortlichkeiten. /etc/rc koordiniert den Boot-Prozess. Einzelne Services in /etc/rc.d/ sind unabhängige Scripte. rcctl bietet komfortable Service-Verwaltung ohne die Init-Komplexität zu erhöhen. Text-Konfiguration in /etc/rc.conf steuert alle Dienste zentral.

Die Wahl des Init-Systems beeinflusst System-Administration, Boot-Zeit und Fehlersuche. systemd bietet mehr Features auf Kosten höherer Komplexität. SysV-Init und BSD-Init bleiben transparent und wartbar.

Praktische Implikationen

Das Verständnis von PID 1 und Init-Konzepten hilft bei alltäglichen Aufgaben:

Troubleshooting:

Wenn Dienste nicht starten, liegt die Ursache oft in Abhängigkeiten oder Init-Konfiguration. Die Prozess-Hierarchie zeigt sich mit ps -ef (PPID-Spalte) - auf Linux bietet pstree eine übersichtlichere Baum-Darstellung.

System-Recovery:

Bei Boot-Problemen kann init=/bin/bash als Kernel-Parameter eine Shell als PID 1 starten. Das System startet ohne normale Dienste - nützlich für Notfall-Reparaturen.

Performance:

Die Boot-Zeit hängt stark vom Init-System ab. Paralleler Start (systemd) beschleunigt, sequenzieller Start (SysV) verzögert. Die Service-Reihenfolge beeinflusst, wann das System nutzbar wird.


Verwendete Software und Versionen

Diese Anleitung bezieht sich auf:

  • Unix/Linux-Systeme: Allgemeine Init-Konzepte
  • Kontext: Distributionsunabhängig - systemd, SysV-Init, BSD-Init
  • Stand: Oktober 2025

michael von den Drachen

Softwareentwickler seit den 80ern. Systemkritiker seit immer. Betreibt produktive OpenBSD/Debian-Infrastruktur und entwickelt eigenes API-Gateway (furt).
Mehr über michael →
Init-Konzept: PID 1 und System-Start
← Nächster Artikel Service-Management: Dienste kontrollieren