Bonjour
Je souhaite lancer un serveur en tache de fond, j'ai essayé de faire comme dans l'extrait tiré de < ce post > (Le second exemple)
J'ai du mal avec l'étape 4 ("Finalement le démon doit fermer tous les descripteurs de fichier que le schell aurait pu lui passer "), Je ne sais pas comment faire.
J'ai essayé avec la fonction getdtablesize():
Mais mon programme ne se lance pas (je ne le retrouve pas dans la liste des procéssus en fonction ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int i; for (i = getdtablesize (); i >= 0; --i) close (i);
J'ai écrit une fonction qui semble faire ce que je veux, mais j'ai de gros doutes quand à sa fiabilité.
J'aimerai donc avoir votre avis sur la fonction suivante:
Voila
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 void lancer_demon (void) { pid_t pid; /* On se sépare du père */ pid = fork (); if (pid < 0) { perror ("fork() "); exit (EXIT_FAILURE); } if (pid > 0) exit (EXIT_SUCCESS); /* Création d'une nouvelle session */ setsid (); /* Séparation du terminal*/ pid = fork (); if (pid < 0) { perror ("fork() "); exit (EXIT_FAILURE); } if (pid > 0) exit (EXIT_SUCCESS); /* Fermeture des entrée/sorties*/ fclose (stdout); fclose (stdin); /* Redirection de stderr vers un fichier log */ freopen ("/var/log/serveur.log", "w" , stderr); /* Changement du mask de création de fichier */ umask (022); /* On se place dans le répertoire de travail*/ chdir ( getenv( "SERVER_PATH" ) ); }![]()
Partager