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 87<br />

13–21<br />

22–29<br />

30–33<br />

Im Hauptprogramm wird nach einer Kontrollausgabe <strong>mit</strong>tels fork() ein Kindprozeß<br />

gestartet. Im Fehlerfall beendet sich das Programm sofort <strong>mit</strong> einer<br />

entsprechenden Fehlermeldung.<br />

Der neue Kindprozeß erfüllt keine besondere Aufgabe. Er wartet lediglich das<br />

vorgegebene Zeitintervall ab <strong>und</strong> beendet sich danach <strong>mit</strong> einem willkürlichen<br />

Statuscode. Der Statuscode soll später vom Elternprozeß er<strong>mit</strong>telt <strong>und</strong><br />

ausgegeben werden.<br />

Der Elternprozeß wartet zunächst, bis zum eben gestarteten Kindprozeß Statusinformationen<br />

vorliegen. Der waitpid()-Funktion wird zu diesem Zweck<br />

ohne weitere Optionen die Prozeß-ID des Kindes übergeben. Sobald der Kindprozeß<br />

beendet wurde, füllt waitpid() die Statusinformationen in die Variable<br />

status <strong>und</strong> kehrt <strong>mit</strong> der PID des Kindes als Rückgabewert zurück.<br />

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

6 #include <br />

Beispiel 2.20. wait-child.c<br />

7<br />

8 int main( int argc, char *argv[] )<br />

9 {<br />

10 pid_t pid;<br />

11 int status;<br />

12<br />

13 printf( "Prozeß %d: Starte fork().\n", getpid() );<br />

14<br />

15 switch( pid = fork() )<br />

16 {<br />

17 case -1: /* Fehler */<br />

18 printf( "Prozeß %d: Fehler in fork(): %s.\n",<br />

19 getpid(), strerror( errno ) );<br />

20 exit( EXIT_FAILURE );<br />

21 break;<br />

22 case 0: /* Kindprozeß */<br />

23 printf( "Prozeß %d: Ich bin der neue Kindprozeß.\n",<br />

24 getpid() );<br />

25 sleep( 20 ); /* Brotzeitpause */<br />

26 printf( "Prozeß %d: Genug gewartet. Bye-bye.\n",<br />

27 getpid() );<br />

28 exit( 7 ); /* Willkürlicher Rückgabewert zum Test */<br />

29 break;<br />

30 default: /* Elternprozeß */<br />

31 printf( "Prozeß %d: Kindprozeß läuft: PID = %d.\n",<br />

32 getpid(), pid );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!