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