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.

88 2 Programmieren <strong>mit</strong> <strong>Unix</strong>-Prozessen<br />

33 waitpid( pid, &status , 0 );<br />

34 printf( "Prozeß %d: Kind hat sich verabschiedet.\n",<br />

35 getpid() );<br />

36 printf( "Prozeß %d: Rückgabewert: %d.\n",<br />

37 getpid(), WEXITSTATUS( status ) );<br />

38 printf( "Prozeß %d: Kind normal beendet: %s.\n",<br />

39 getpid(), WIFEXITED( status ) ? "ja" : "nein" );<br />

40 if( WIFSIGNALED( status ) )<br />

41 printf( "Prozeß %d: Kind von Signal %d beendet.\n",<br />

42 getpid(), WTERMSIG( status ) );<br />

43 break;<br />

44 }<br />

45<br />

46 exit( EXIT_SUCCESS );<br />

47 }<br />

34–42<br />

Anschließend werden die er<strong>mit</strong>telten Statusinformationen analysiert <strong>und</strong> ausgegeben,<br />

bevor sich das Programm schließlich selbst beendet.<br />

Ein Testlauf liefert das erwartete Ergebnis: Nach einer Kontrollausgabe startet<br />

der Elternprozeß einen Kindprozeß <strong>und</strong> wartet auf dessen Ende. Nach einer<br />

ersten Ausgabe legt sich der Kindprozeß für das vorgegebene Zeitintervall<br />

schlafen <strong>und</strong> beendet sich nach einer weiteren Ausgabe wieder. Sobald der<br />

Kindprozeß terminiert ist, kehrt der Elternprozeß aus der waitpid()-Funktion<br />

zurück <strong>und</strong> gibt die gewonnenen Statusinformationen auf der Konsole aus.<br />

$ ./wait-child<br />

Prozeß 920: Starte fork().<br />

Prozeß 920: Kindprozeß läuft: PID = 921.<br />

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

Prozeß 921: Genug gewartet. Bye-bye.<br />

Prozeß 920: Kind hat sich verabschiedet.<br />

Prozeß 920: Rückgabewert: 7.<br />

Prozeß 920: Kind normal beendet: ja.<br />

Die Statusinformationen ändern sich natürlich entsprechend, wenn der Kindprozeß<br />

z. B. durch ein Signal beendet wird:<br />

$ ./wait-child<br />

Prozeß 922: Starte fork().<br />

Prozeß 922: Kindprozeß läuft: PID = 923.<br />

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

Prozeß 922: Kind hat sich verabschiedet.<br />

Prozeß 922: Rückgabewert: 0.<br />

Prozeß 922: Kind normal beendet: nein.<br />

Prozeß 922: Kind von Signal 15 beendet.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!