ein Kapitel zurück                                           ein Kapitel weiter

Jeder der sich ernsthaft mit der Programmierung und Linux auseinandersetzen will, sollte wissen worum es sich bei Prozessen handelt. Unter Linux ist die Prozessverwaltung sozusagen die Schlüsselfigur bei vielen Programmen die sie Schreiben werden.

Dafür ist diese Kaptitel gedacht. Sie werden erst mal einiges zu Prozessen lernen bevor sie selber welche Erzeugen.

Definition eines Prozesses
Ein Prozess ist ein in der Ausführung befindliches Programm mit seiner Ausführungsumgebung (Environment).

Die Prozessverwaltung
Da Linux ein echtes Multitaskingsystem ist, werden mehrer Programme (Prozesse, Task) "gleichzeitig" ausgeführt. Wobei "Gleichzeitig" nicht stimmt. Ein Prozessor (CPU) kann logischerweise immer nur mit einem Prozess arbeiten. Wollen sie wirklich gleichzeitig das mehrere Programme parallel ablaufen, benötigen sie entweder mehrere Rechner oder mehrer Prozessoren. Dies dürfte aber für die meisten Anwender uninteressant sein (wegen den Anschaffungskosten).

Jeder Prozess hat also einen ,extra für sich, virtuellen Adressraum. Somit kann keiner der Prozesse den anderen Stören oder Beeinflussen.

Zugegriffen wird auf die einzelnen Prozesses nacheinander von der CPU. Wie lange und in welcher Reihenfolge entscheidet der Prozess-Scheduler. Von der Geschwindigkeit werden sie aber nichts mitkriegen. Sie werden den Eindruck habe das die Prozesse wirklich parallel laufen.

Linux ist als ein preemptive Multitaskingsystem. Dies bedeutet das Linux selbst entscheidet wie lange ein Prozess die CPU benutzen darf und wann der nächste Prozess an der Reihe ist. Wollen sie in den Prozess-Scheduler eingreifen, können sie dies als root mit dem Kommando nice. Mehr unter man nice oder nice --help

Welche Prozesse momentan laufen können sie mit dem Kommando ps anzeigen lassen.......

ps -x  

Nun wird ein Liste der momentan laufenden Prozesse ausgegeben. Hierzu kurz ein Erläuterung was die einzelnen Sektionen bedeuten..........

PID  TTY              STAT    TIME   COMMAND
1234 pts/0            R       0:00   ps -x


  • PID = Prozess-ID. Jeder Prozess bekommt eine eigenen eindeutige Prozess-ID. Über diese Prozess-ID werden wir später auf diesen Prozess zugreifen können. Wenn sie zum Beispiel Informationen zum Prozess mit der ID 1501 haben wollen geben sie das Kommando.......

    ps 1501  

    ...ein. Kennen sie die Prozess-ID nicht, aber das laufende Kommando, geben sie in der Konsole..........

    pidof /bin/bash  

    ...ein und sie erhalten die Prozess-ID dafür.

  • TTY = Zeigt an in welchem (Kontroll)Terminal der Prozess ausgeführt wird. Steht dort kein Wert handelt es sich meist um einen Dämon-Prozess (kommt noch).

  • STAT = Zeigt den aktuellen Status des Prozesses an. In unserem Fall steht hier ein R für RUN. Dieser Prozess ist also gerade Aktiv. Folgende Bedeutung haben folgende Zeichen:

     S = sleeping
     SW= Datei wurde in dem Swap-Speicher ausgelagert (siehe auch "man mkswap")
     R = running
     Z = Zombie (Prozess ist abgelaufen aber hat noch keinen Rückgabestatus an
         den Vaterprozess geschickt)  


  • TIME = Laufzeit des Prozesses

  • COMMAND = Kommandoname des Prozesses mit dem sie diese gestartet haben z.B.


Die Anordnung der Prozesse unter Linux sind Hierarchisch. Dies läuft wie bei einem Familienstammbaum ab. Jeder Prozess besitzt Informationen von welchem Prozess er erzeugt wurde. Also dem Vaterprozess.

Sind sie nun Interessiert welche Prozess wie viel CPU-Zeit benötigt können sie das Kommando top verwenden. Diese zeigt Ihnen eine Überblick wie viel Rechenzeit ein CPU gerade für ein bestimmtes Programm verbrät. Mit 'q' können sie das Programm wieder beenden. Achten sie auf die '%CPU' Rechenzeit.

Ein bißchen verwirren wird sie dabei der Eintrag kapm-idled oder nur idled. Dieser Prozess benötigt ja fast die ganze Rechenzeit. Da auf unserem System ja momentan nicht allzu viel läuft, müssen die Prozesse ja ein wenig aufgeteilt werden. Idled kann man sich praktisch als eine Endlosschleife vorstellen, die immer ausgeführt wird, wenn nichts anderes zu tun ist. Sie können ja mal eine Kernel compilieren, ein Diskette formatieren und dann das Kommando top eingeben.

Die Prozeßtabelle
Mancher Wissensdurstiger wird jetzt wo sich dieser Scheduler für den Prozess befindet. Sie finden diese Prozesstabelle in der Headerdatei...

/usr/include/linux/sched.h  

Nach der Struktur struct task_struct müssen sie Ausschau halten. Hier befinden sich alle Zustandsinformationen zu einem Prozess. Diese Informationen sind recht Umfangreich und alle jetzt zu Erklären würde nicht allzu viel bringen. Aber ich finde es ist ganz gut Kommentiert. Grob zusammengefasst finden sie darin folgende Informationen.............

  • Prozessidenfikation - Hier steht fest welche Rechte der Prozess hat. Diese wiederum ergeben sich aus den effektiven bzw. realen Benutzer- und Gruppennummern. Natürlich finden sie hier die oben besprochene Prozessnummer (PID) wieder.

  • Prozesspriorität - Sie wissen ja das Linux einen Prozess nach dem anderen durchläuft. Jeder Prozeß hat nun eine bestimmte Zeit für sich zur Verfügung. Ist diese Zeit um, muss er sein Arbeit hinlegen, sofern er nicht fertig ist und warten bis er das nächste mal dran kommt. Und dieser Teil ist dafür Zuständig. So kann der Kernel feststellen welchen Prozess er als nächstes ansteuert.

  • Accounting Informationen - Hier stehen die Informationen zu den Speicherzugriffen im virtuellen Speicher. Diese Informationen werden benötigt wenn ein Prozess auf eine bestimmte Speicherseite zugreifen will, diese aber noch nicht geladen wurde. Nun meldet die Hardware eine Page Fault worauf der Kernel mit dem Nachladen dieser Seite antwortet.

  • Kontrollterminal - Jeder Prozess, abgesehen von den Dämonprozessen benötigt ein Kontrollterminal wo sie die Einträge für Standard-Ein/Aus und Fehlerausgabe befinden (stdin, stdout, stderr).

  • Lokale Deskriptortabelle - Diese Tabelle wird von Prozessen benötigt die auf die Speicherverwaltung von M$-Systemen zugreifen wollen. Wird von Windows-Emulationen verwendet.

Dies war jetzt ein erster kurzer Überblick zu den Prozessen unter Linux. In den nächsten Kapiteln werden sie sehen, wie sie Prozesse kreieren können und diese miteinander Kommunieren kommunizieren können. Natürlich werden sie auch etwas zu den Dämonprozessen erfahren. Wie und Wozu man sie verwendet. Wir werden auch sehen wie man eigene Dämonprozesse schreibt.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf