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.

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

6 #include <br />

7 #include <br />

8 #include <br />

9 #include <br />

5.6 Nebenläufige Server <strong>mit</strong> Preforking 291<br />

Beispiel 5.20. prefork-srv.c, Teil 1<br />

10<br />

11 #include "server.h"<br />

12<br />

13 int daemon_exit = 0, child[NUM_PROCS];<br />

14<br />

15 void sig_handler( int sig )<br />

16 {<br />

17 pid_t pid;<br />

18 int i;<br />

19<br />

20 switch( sig )<br />

21 {<br />

22 case SIGTERM:<br />

23 daemon_exit = 1;<br />

24 break;<br />

25 case SIGCHLD:<br />

26 while( ( pid = waitpid( -1, NULL, WNOHANG ) ) > 0 )<br />

27 for( i = 0; i < NUM_PROCS; i++ )<br />

28 if( pid == child[i] )<br />

29 child[i] = 0; /* Prozeß -ID austragen */<br />

30 break;<br />

31 default:<br />

32 break;<br />

33 }<br />

34 return;<br />

35 }<br />

15–35<br />

Wie schon in Beispiel 5.17 kümmert sich die sig_handler()-Funktion um die<br />

Verarbeitung der beiden Signale SIGTERM <strong>und</strong> SIGCHLD. Die Behandlung des<br />

SIGCHLD-Signals wurde im Vergleich zum vorigen Signal insofern verändert,<br />

als daß die Signalbehandlungsroutine im Feld child über die aktiven Prozesse<br />

Buch führt. Sobald sich ein Kindprozeß beendet hat, wird die zugehörige<br />

Prozeß-ID aus dem Feld entfernt.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!