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():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
int i;
for (i = getdtablesize (); i >= 0; --i)
    close (i);
Mais mon programme ne se lance pas (je ne le retrouve pas dans la liste des procéssus en fonction ).


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:
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" ) );
}
Voila