Zukunft des Linux-Dateisystems Das Dateisystem - Inhalt Interprozesskommunikation Inhalt Index


Prozesse

Unter Linux können mehrere Prozesse gleichzeitig ausgeführt werden. "Gleichzeitig" bedeutet hier quasi-parallel, d.h. dem Nutzer wird durch die sequentielle Abarbeitung mehrerer Prozesse in kleinen Zeitscheiben die Existenz mehrerer Prozessoren vorgegaukelt.

Welche Prozesse im Augenblick laufen, verrät uns z.B. das Kommando ps:

user@sonne> ps ax
  PID TTY STAT TIME COMMAND
    1   ? S    0:03 init [2] 
    2   ? SW   0:00 (kflushd)
    3   ? SW<  0:00 (kswapd)
    8   ? S    0:00 update (bdflush)
   57   ? S    0:00 /sbin/kerneld
   68   ? S    0:00 /usr/sbin/klogd -c 1
   70   ? S    0:00 /usr/sbin/syslogd
   89   ? S    0:00 /usr/sbin/rpc.mountd
   91   ? S    0:00 /usr/sbin/rpc.nfsd
   93   ? S    0:00 /usr/sbin/rpc.ugidd
  105   ? S    0:00 /usr/sbin/cron
  110   ? S    0:00 /usr/sbin/inetd
  112  a0 S    0:00 /usr/bin/gpm -t ms -m /dev/mouse
  115   ? S    0:00 /usr/sbin/lpd
  127   ? S    0:01 /usr/sbin/sshd
  129   ? S    0:00 sendmail: accepting connections on port 25
  144   3 S    0:00 /sbin/mingetty tty3
  145   4 S    0:00 /sbin/mingetty tty4
  146   5 S    0:00 /sbin/mingetty tty5
  147   6 S    0:00 /sbin/mingetty tty6
  160   ? S    1:54 /usr/X11R6/bin/Xwrapper :0 -bpp 8
 1561   2 S    0:00 bash
 1568   2 R    0:00 ps x
		

Aus obigem Listing sind folgende Informationen abzulesen:

PID Prozessnummer, jeder Prozess erhält bei seiner Erstellung eine eindeutige PID. Der erste Prozess beim Systemstart erhält die PID 1, der init-Prozess.
TTY Welcher Prozess läuft auf welchem virtuellen Terminal (Konsole)? tty3-6 warten auf ein Login (mingetty). Ein Fragezeichen kennzeichnet Prozesse, die kein Terminal kontrollieren.
STATE Zustand des Prozesses: 
 D  Der Prozess wartet auf einen bestimmten Hardwarezustand (uninterruptible sleep).
 L Die Speicherseite(n) des Prozesses darf nicht ausgelagert werden.
 N Der Prozess läuft mit einer niedrigeren Priorität (ihm wird weniger Rechenzeit als gewöhnlichen Prozessen zugestanden).
 R Der Prozess wartet auf die Zuteilung der CPU (runable).
 S Der Prozess wartet auf das Eintreten eines Ereignisses, z.B. das Beenden eines IO-Transfers... (spleeping).
 T Der Prozess befindet sich im Einzelschrittlauf, z.B. für Debuggingzwecke (traced).
 Z Der Prozess existiert nicht mehr, aber der Vaterprozess hat den Rückgabestatus noch nicht geprüft (zombie).
 W Die dem Prozess zugehörige Speicherseite befindet sich nicht im Hauptspeicher (ist also ausgelagert).
 < Der Prozess läuft mit einer höheren Priorität (ihm wird mehr Rechenzeit als gewöhnlichen Prozessen zugestanden).
TIME Verbrauchte CPU-Zeit des Prozesses
COMMAND Name des Programmes, welches vom Prozess ausgeführt wird


Entstehen und Vergehen

Ein Prozess entsteht, indem ein Elternprozess mittels des Systemrufes fork() einen neuen Prozess erzeugt (Ausnahme ist init, der einzige "von Hand generierte" Prozess). Dieser Kindprozess teilt sich alle Ressourcen mit dem Elternprozess, wesentliche Unterschiede sind nur ein eigener Stack und eine eigene PID.

Geburt eines Prozesses

Anhand des Rückgabewertes von fork() ist es den beiden Prozessen nun möglich, zu unterscheiden, ob es sich um den Vorfahren oder einen Nachkommen handelt.

Kind oder Eltern?

In Abhängigkeit hiervon wird nun ein Kindprozess mittels des Systemrufes exec() ein neues Programm laden.

Laden eines neuen Programmes

Irgendwann wird ein Kindprozess seine Arbeit beenden und diesen Zustand seinem Elternprozess durch eine entsprechende Nachricht signalisieren. Obwohl der Kindprozess bereits jetzt aus Speicher und Prozesstabelle entfernt ist, muss dieses Signal noch verarbeitet werden. Für gewöhnlich zeichnet der Elternprozess dafür verantwortlich.

Tod eines Kindprozesses

Zwei Situationen könnten den "normalen Werdegang" durcheinander bringen:

  1. Der Elternprozess ist anderweitig beschäftigt (befindet sich im Zustand D o.a.). In einem solchen Fall symbolisiert der Zustand Z das noch zu behandelnde Signal. Genau genommen durchläuft jeder Kindprozess die Laufbahn eines Zombies (Zeitspanne zwischen Ableben und Signalbehandlung), jedoch ist sie meist von so kurzer Dauer, dass man gar nichts davon mitbekommt.

    Nachricht aus den Jenseits



  2. Der Elternprozess existiert nicht mehr (Programmfehler o.a.). Jetzt ist der init-Prozess für der Signalbehandlung verantwortlich.

    Ein Waise


Zukunft des Linux-Dateisystems Das Dateisystem - Inhalt Interprozesskommunikation Inhalt Index