Unix bietet ein echtes präemtives Multitasking-System, das jedem Prozeß, der gerade läuft, eine bestimmte Menge Rechenzeit zuweist. Der Prozeß, der für diese Zuweisung zuständig ist, heißt Scheduler und hat grundsätzlich die Prozeß-ID 0. Das bedeutet, dass er grundsätzlich der erste Prozeß ist, der gestartet wird. In den meisten Unixen bleibt dieser Prozeß unsichtbar.

Der Scheduler startet als erstes den Prozeß, der zwangsläufig immer die PID 1 bekommt, den Init-Prozeß. Dieser Prozeß ist der Vater aller weiteren Prozesse des Systems. Er ist zuständig für die Initialisierung des Systems und damit auch für die gesamten weiteren Prozesse, die im Verlauf noch gestartet werden.

Der Init-Prozeß startet nun zwei verschiedene Arten von Prozessen, die wir uns im Folgenden etwas genauer betrachten wollen: Daemon-Prozesse und Benutzer-Prozesse.

Daemon-Prozesse

Als Daemonen werden diejenigen Prozesse bezeichnet, die selbst kein Terminal besitzen und benutzen. Meist handelt es sich dabei um Serverprozesse, also Dienstprogramme, die im Hintergrund ablaufen und zu bestimmten Anlässen bestimmte Aktionen durchführen.

Der Init-Prozeß startet, je nachdem, wie er konfiguriert ist, verschiedene solcher Prozesse direkt. Das bedeutet, dass diese Daemon-Prozesse als Eltern-Prozeß direkt den Init-Prozeß haben.

Benutzer-Prozesse

Benutzer-Prozesse sind die Prozesse, die einem bestimmten Terminal zugeordnet sind. Unter den alten, klassischen Unixen waren Computer ja immer die großen Dinger im Keller, die BenutzerInnen haben sich über Terminals eingeloggt. Ein Terminal ist im einfachsten Fall ein Bildschirm und eine Tastatur, die über eine serielle Leitung mit dem Computer verbunden ist. Diese Terminalleitungen werden noch heute als TTY-Leitungen bezeichnet, von TeleTYpe (Fernschreiber) – tatsächlich waren es Fernschreiber, die die ersten Unix-Maschinen angesteuert hatten.

Damit auch auf PCs diese Fähigkeit vorhanden ist, bieten die meisten PC-Unixe sogenannte virtuelle Terminals an, durch Drücken der Tastenkombination Alt-F1 bis Alt-F12 (meist nur Alt-F6) kann zu den jeweiligen Terminals (TTY1-TTY12 bzw TTY1-TTY6) gewechselt werden.

Um an einem Terminal zu arbeiten, muß sich ein/e Benutzer/in zunächst einloggen, d.h., sich ausweisen. Das geschieht üblicherweise durch die Nennung eines Usernamens und eines dazu passenden Passworts. Ist dieser Vorgang abgeschlossen, so wird ein Kommandointerpreterprogramm (Shell) gestartet, und der/die Benutzer/in kann mit dem System arbeiten.

Der Startvorgang der Benutzerprozesse

Zunächst startet der Init-Prozeß für jedes Terminal, das aktiv sein soll, einen sogenannten GETTY-Prozeß. Dieser Prozeß schreibt eine Begrüßungsmeldung (aus der Datei /etc/issue) auf den Bildschirm und fordert dann zur Eingabe des Benutzernamens auf.

Rechnername login:

Diese Aufforderung steht solange auf dem Bildschirm, bis jemand tatsächlich daran arbeiten will und folglich seinen Benutzernamen eingibt. Der GETTY-Prozeß nimmt diesen Namen entgegen und startet danach ein Programm namens login, dem er den gelesenen Benutzernamen als Parameter mitgibt.

Der login-Prozeß gibt jetzt die Aufforderung auf den Bildschirm aus, das Passwort einzugeben:

password:

Das eingegebene Passwort wird jetzt vom login-Prozeß verschlüsselt und dann mit dem verschlüsselt abgespeicherten Passwort des Users verglichen. Sollte dieser Vergleich scheitern, so frägt der Prozeß erneut nach dem Passwort, insgesamt dreimal, so dass nach dem dritten falschen Passwort erneut der GETTY-Prozeß startet und wieder nach dem Benutzernamen frägt.

Wenn das Passwort gestimmt hat, so startet der login-Prozeß jetzt einen Kommandointerpreter (oder in seltenen Fällen andere Programme). Dieser Kommandointerpreter, der in etwa funktioniert wie die DOS-Eingabeaufforderung wird unter Unix Shell genannt. Damit die beiden Prozesse GETTY und LOGIN nicht weiter im Speicher verbleiben (und dort unnötig Platz verschwenden), begehen diese Prozesse sozusagen Selbstmord und der Init-Prozeß adoptiert die aufgerufene Shell. Die Shell hat jetzt also als Eltern-ProzeßID (PPID) die Nummer 1.

Von diesem Zeitpunkt ab, können die Anwender jetzt ihrerseits Prozesse starten, indem sie Programme aufrufen. Die Shells von Unix erlauben auch mehrere Programmaufrufe, so dass dadurch ein sehr komplexer Prozeßbaum entstehen kann, wie es der folgenden Graphik entnommen werden kann:

Jeder Ast des Baums, der von einem Getty-Prozeß abstammt, läuft auf einem bestimmten Terminal, die Daemon-Prozesse haben kein eigenes Terminal, sie laufen also grundsätzlich im Hintergrund und sind meist direkt vom Initprozeß gestartet.