Product SiteDocumentation Site

B.5. Die Anwendungsebene

„Anwendungsebene“ bezieht sich auf die Laufzeitumgebung normaler Prozesse im Gegensatz zu Kernelprozessen. Das bedeutet nicht unbedingt, dass diese Prozesse tatsächlich von Benutzern gestartet wurden, da auf einem Standardsystem üblicherweise bereits mehrere „Daemon“-Prozesse laufen, bevor ein Benutzer überhaupt eine Sitzung eröffnet. Daemon-Prozesse sind Prozesse der Anwendungsebene.

B.5.1. Prozess

Wenn der Kernel seine Initialisierungsphase beendet hat, startet er den ersten Prozess, init. Prozess #1 ist für sich selbst kaum nützlich, und Unix-artige Systeme laufen mit allen möglichen Arten von Prozessen.
Zunächst einmal kann sich ein Prozess kopieren (dies wird als Fork bezeichnet). Der Kernel teilt einen neuen, aber gleichgroßen Prozess-Speicherplatz zu und einen weiteren Prozess, um ihn zu nutzen. Zu diesem Zeitpunkt besteht der einzige Unterschied zwischen den beiden Prozessen in ihrer PID. Der neue Prozess wird üblicherweise Kindprozess genannt, und der Prozess, dessen PID sich nicht ändert, Elternprozess.
Manchmal fährt der Kindprozess fort, sein eigenes Leben unabhängig vom Elternprozess zu führen, mit seinen eigenen, vom Elternprozess kopierten Daten. In vielen Fällen führt der Kindprozess jedoch ein anderes Programm aus. Bis auf wenige Ausnahmen wird sein Speicher einfach durch den Speicher des neuen Programms ersetzt, und die Ausführung dieses neuen Programms beginnt. Eine der ersten Aktionen von Prozess 1 besteht daher darin, sich zu verdoppeln (das heißt, dass es für eine winzige Zeitspanne zwei laufende Exemplare desselben init-Prozesses gibt), jedoch wird der Kindprozess dann durch das erste Systeminitialisierungsskript ersetzt, normalerweise durch /etc/init.d/rcS. Dieses Skript kopiert sich seinerseits und führt mehrere andere Programme aus. Zu einem bestimmten Zeitpunkt startet ein Prozess der init-Abkömmlinge dann eine grafische Schnittstelle, über die sich Benutzer anmelden können (der tatsächliche Ablauf der Ereignisse ist in größerer Ausführlichkeit in Abschnitt 9.1, „Systemstart“ beschrieben.
Wenn ein Prozess die Aufgabe, für die er gestartet wurde, erfüllt hat, beendet er sich. Anschließend nimmt der Kernel den diesem Prozess zugewiesenen Speicher wieder zurück und hört auf, Teile der Prozessorzeit zuzuteilen. Der Elternprozess wird über die Beendigung seines Kindprozesses informiert. Auf diese Weise kann ein Prozess auf den Abschluss einer Aufgabe warten, die er an einen Kindprozess übertragen hat. Dieses Verhalten ist bei Kommandozeileninterpretern (auch als Shells bekannt) deutlich zu sehen. Wenn ein Befehl in eine Shell eingegeben wird, erscheint die Eingabeaufforderung erst dann wieder, wenn die Ausführung des Befehls beendet ist. Die meisten Shells ermöglichen eine Ausführung des Befehls im Hintergrund. Dazu wird einfach ein & an das Ende des Befehls angehängt. Die Eingabeaufforderung wird dann sofort wieder angezeigt, was jedoch zu Problemen führen kann, wenn das abgesetzte Kommando seine eigenen Daten anzeigen muss.