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.6 Dæmon-Prozesse 97<br />

1. Terminalgenerierte Signale ignorieren<br />

2. Umwandlung in einen Hintergr<strong>und</strong>prozeß<br />

3. Aufbrechen der Assoziation zum kontrollierenden Terminal<br />

4. Schließen unbenötigter Dateideskriptoren<br />

5. Arbeitsverzeichnis wechseln<br />

6. Dateimodusmaske für neu erstellte Dateien ändern<br />

8–13<br />

15–29<br />

In der Funktion daemon_init() werden zunächst einige Hilfsvariablen vereinbart.<br />

Dem Feld sigs[] ist eine Liste von Signalen zugewiesen, die der neue<br />

Dæmon-Prozeß ignorieren soll.<br />

Die Behandlung der im Feld sigs[] hinterlegten Signale wird über je einen<br />

Aufruf von sigaction() jeweils auf Ignorieren eingestellt. Nachdem die<br />

Schleife erfolgreich abgearbeitet wurde, kann der Prozeß nicht mehr durch<br />

das Eintreffen eines dieser terminalgenerierten Signale zum Programmabbruch<br />

veranlaßt werden.<br />

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

6 #include <br />

Beispiel 2.22. daemon.c, Teil 1<br />

7<br />

8 void daemon_init( const char *program , int facility )<br />

9 {<br />

10 pid_t pid;<br />

11 int i, sigs[] = { SIGHUP , SIGINT , SIGQUIT , SIGTSTP ,<br />

12 SIGTTIN , SIGTTOU };<br />

13 struct sigaction action;<br />

14<br />

15 /* Schritt 1: Terminalgenerierte Signale ignorieren */<br />

16<br />

17 action.sa_handler = SIG_IGN;<br />

18 sigemptyset( &action.sa_mask );<br />

19 action.sa_flags = 0;<br />

20<br />

21 for( i = 0; i < sizeof( sigs ) / sizeof( int ); i++ )<br />

22 {<br />

23 if( sigaction( sigs[i], &action , NULL ) < 0 )<br />

24 {<br />

25 fprintf( stderr , "%s: Fehler in sigaction(): %s.\n",<br />

26 program , strerror( errno ) );<br />

27 exit( EXIT_FAILURE );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!