Das Prozess-System
Der Begriff Prozess (engl. process) bezeichnet ein Programm, das gerade geladen ist und (meist) läuft. Unix unterscheidet streng zwischen den Terminologien Prozess und Programm. Ein Programm ist das – auf der Platte gespeicherte – Konstrukt, das meist Maschinensprache-Befehle enthält. Zum Prozess wird dieses Programm dadurch, dass es aufgerufen – und damit in den Arbeitsspeicher geladen wird. Notwendig wird diese Unterscheidung dadurch, dass ein Programm mehrmals gleichzeitig aufgerufen werden kann. Das Programm existiert nur einmal (als Datei auf der Platte), jede Instanz des Programmes, die im Speicher steckt ist jetzt ein Prozess. Jeder Prozess hat unter Unix mehrere Eigenschaften, die wichtigste ist die Prozess-ID, eine eindeutige Nummer, die ihn ansprechbar macht. (PID)
Als ProzessID werden in der Regel 16 Bit Zahlen verwendet, die beim Systemstart von 0 ab hochgezählt werden. Das bedeutet, dass Unix nicht mehr als 65536 Prozesse gleichzeitig laufen lassen kann, eine Grenze, die sicherlich weit genug gesteckt ist. Sobald die PID 65535 erreicht ist, werden die nachfolgenden Prozesse wieder mit den freigewordenen Prozessen ab PID 2 nummeriert.
Neben der ProzessID hat jeder Prozess auch noch einen Elternprozess. Prozesse fallen nie vom Himmel, mit Ausnahme des allerersten Prozesses wird jeder Prozess von einem anderen Prozess gestartet. Die Nummer des Prozesses, der den aktuellen Prozess gestartet hat, ist die PPID – die Parent-ProcessID.
Prozesse und alles, was damit zusammenhängt, tragen unter Unix sehr blutrünstige Namen. Es gibt Dämonen und Zombies, Prozesse werden gekillt oder begehen Selbstmord (to hang up). Das ist alles nicht so brutal, wie es auf den ersten Blick scheint, im Folgenden will ich die wichtigsten dieser Begriffe klären:
Ein Prozess ist in der Lage, Signale von anderen Prozessen zu empfangen. Diese Signale können den Prozess dazu bringen, bestimmte Handlungen vorzunehmen, etwa seine Konfigurationsdatei neu einzulesen oder sich aufzuhängen. Man spricht hier von Inter-Process-Communication (IPC), also der Möglichkeit, Prozesse fernzusteuern. Das Programm, das benutzt wird, um solche Signale zu schicken, heißt kill, weil es häufig benutzt wird, um Prozesse zu beenden, es kann aber auch andere Signale schicken. Dieses Programm wird später genauer beschrieben.
Prozesse können aber auch nett zueinander sein (engl. nice). Das bedeutet, dass ein Prozess auf Rechenzeit verzichtet, damit andere Prozesse diese Zeit nutzen können. Jeder Prozess hat einen sogenannten Nice-Wert, normalerweise ist dieser Wert 0. Je höher der Nice-Wert ist, um so weniger Rechenzeit benutzt der Prozess, um so netter ist er also zu anderen Prozessen. Nur der Systemverwalter kann Prozesse mit einem negativen Nice-Wert ausstatten und die Prozesse damit mit mehr Rechenzeit versehen, als ihnen eigentlich zusteht.
Dämon-Prozesse sind einfach Prozesse, die im Hintergrund lauern und warten, bis sie gebraucht werden. In der Regel sind das Serverprozesse, die darauf warten, dass ein Client ihre Dienste in Anspruch nimmt. Das Charakterisierende an solchen Prozessen ist, dass sie kein eigenes Ausgabeterminal haben.
Zombies schließlich sind Prozesse, die eigentlich schon ihre Arbeit erledigt haben und damit gestorben sind, aber noch auf einen anderen Prozess warten müssen, der langsamer ist und ihre Daten braucht. Zombies verbrauchen keine Rechenzeit mehr, belegen aber noch Arbeitsspeicher.