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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2.5 Prozeßkontrolle 79<br />

2.5.2 Neue Prozesse erzeugen<br />

Die Erzeugung neuer Prozesse basiert auf <strong>Unix</strong>-Systemen bildhaft gesprochen<br />

auf dem Modell der Zellteilung. Mit Hilfe der fork()-Funktion erstellt ein<br />

Prozeß eine nahezu identische Kopie von sich selbst. Der Name der Funktion<br />

fork() bedeutet im englischen so viel wie ”<br />

sich gabeln, verzweigen oder spalten“.<br />

Die fork()-Funktion führt den aufrufenden Prozeß an eine Weggabelung,<br />

an der sich die Wege von Elternprozeß <strong>und</strong> neuem Kindprozeß trennen.<br />

#include<br />

<br />

pid_t fork( void );<br />

Nach erfolgreichem Verlauf von fork() führen Eltern- <strong>und</strong> Kindprozeß ihren<br />

Weg <strong>mit</strong> der nächsten Anweisung aus dem Programmtext fort. Allerdings in<br />

zwei verschiedenen Prozessen. In den beiden Prozessen unterscheiden sich zudem<br />

die jeweiligen Rückgabewerte der Funktion: Bei erfolgreicher Ausführung<br />

liefert fork() im Elternprozeß die Prozeß-ID des eben geschaffenen Kinds<br />

zurück, im Kindprozeß liefert die Funktion dagegen den Rückgabewert 0. Falls<br />

etwas schief läuft, wird kein neuer Prozeß erzeugt, fork() gibt den Wert -1<br />

zurück <strong>und</strong> die Fehlervariable errno ist entsprechend der Fehlerursache gesetzt.<br />

Beispiel 2.19 zeigt eine typische Anwendung der fork()-Funktion zur<br />

Erzeugung eines neuen Prozeßabbilds:<br />

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

6<br />

7 void show_ids( void )<br />

8 {<br />

9 pid_t my_pid;<br />

Beispiel 2.19. fork-ids.c<br />

10<br />

11 my_pid = getpid();<br />

12<br />

13 printf( "Prozeß %d: PPID = %d\n", my_pid , getppid() );<br />

14 printf( "Prozeß %d: UID = %d\n", my_pid , getuid() );<br />

15 printf( "Prozeß %d: EUID = %d\n", my_pid , geteuid() );<br />

16 printf( "Prozeß %d: GID = %d\n", my_pid , getgid() );<br />

17 printf( "Prozeß %d: EGID = %d\n", my_pid , getegid() );<br />

18 }<br />

19

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!