05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2.5 Prozeßkontrolle 81<br />

Ein Testlauf des Programms aus Beispiel 2.19 zeigt das erwartete Verhalten.<br />

Mit dem Aufruf von fork() entsteht ein Abbild vom ursprünglichen Prozeß:<br />

$ ./fork-ids<br />

Prozeß 25984: Starte fork()<br />

Prozeß 27644: Ich bin der neue Kindprozeß<br />

Prozeß 25984: Kindprozeß läuft: PID = 27644.<br />

Prozeß 27644: PPID = 25984<br />

Prozeß 27644: UID = 518<br />

Prozeß 27644: EUID = 518<br />

Prozeß 27644: GID = 600<br />

Prozeß 27644: EGID = 600<br />

Prozeß 25984: PPID = 20770<br />

Prozeß 25984: UID = 518<br />

Prozeß 25984: EUID = 518<br />

Prozeß 25984: GID = 600<br />

Prozeß 25984: EGID = 600<br />

Der Ausgangsprozeß <strong>mit</strong> der PID 25984 startet nach einer Kontrollausgabe<br />

den fork()-Vorgang. Danach machen die beiden Prozesse, also der Elternprozeß<br />

<strong>und</strong> der neu erstellte Kindprozeß <strong>mit</strong> der PID 27644, durch eine Wortmeldung<br />

auf sich aufmerksam. Die kleine Kunstpause von einer Sek<strong>und</strong>e gibt<br />

in der Regel beiden Prozessen genügend Zeit, die Kontrollausgabe abzuschließen,<br />

bevor der jeweils andere Prozeß <strong>mit</strong> der Ausgabe der verschiedenen IDs<br />

beginnt. 20<br />

Wie die Ausgabe des Programms zeigt, kann die fork()-Funktion von einem<br />

Prozeß keine absolut exakte Kopie erstellen. So müssen sich z. B. die<br />

Prozeß-IDs der beiden Prozesse voneinander unterscheiden, da vom System<br />

bei der Erzeugung des Abbildes wieder eine systemweit eindeutige PID für<br />

das Kind gewählt werden muß. Es gibt aber noch weitere Kriterien, die sich<br />

nach IEEE Std 1003.1-2001 zwischen Eltern- <strong>und</strong> Kindprozeß unterscheiden.<br />

Die wesentlichen Unterscheidungsmerkmale sind:<br />

• Der Kindprozeß erhält eine neue, eindeutige Prozeß-ID (PID), die keiner<br />

vorhandenen Prozeßgruppen-ID (PGID) entspricht.<br />

• Der Kindprozeß erhält eine neue Elternprozeß-ID (PPID), die <strong>mit</strong> der PID<br />

des Prozeß’ übereinstimmt, der die fork()-Funktion aufgerufen hat.<br />

20 Selbstverständlich macht eine solche Pause in realen Anwendungen keinen Sinn.<br />

Der Aufruf von sleep() dient im obigen Beispiel ausschließlich der Demonstration.<br />

Insbesondere ist ein Aufruf von sleep(), egal <strong>mit</strong> welcher Zeitspanne als<br />

Argument, keinesfalls dazu geeignet, den Ablauf von Eltern- <strong>und</strong> Kindprozeß<br />

verläßlich <strong>mit</strong>einander zu synchronisieren.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!