Un deamon unix est un processus interne qui s'exécute en arrière-plan plutôt que sous le contrôle direct d'un utilisateur (ca permet de liberer votre SHELL)c'est l'equivalent d'un service NT sous windows .
ecrire un daemon en C est tres simple avec ses quelque fonction :
-fork
-switch
-umask
-sid
-chdir
-close(shell)
-boucle infini
cc -c daemon.c -o demon
Source / Exemple :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <signal.h>
void daemonize(); // Creation du deamon
int main(int argc,char *argv[])
{
/**demarrage du deamon
daemonize();
/**
ps -aux pour verifier le pid
while(1) // boule infini
{
/**ceci est une GRAVE ERREUR
un deamon ne doit jamais intergir avec
l'utilsateur . il est ecrit pour executer des
tacher cache (hidden task) ex: service reseau ftp,web.
Mettez ca dans la tete ceci est un exemple
puts("tic..c le demon");
/*pur que le puts marche vous devez commenter
ou supprimer la fonction
close(STDOUT_FILENO);
sleep(30);
}
return EXIT_SUCCESS
}
void deamonize(void)
{
pid_t pid,sid;
pid=fork();
switch(pid) {
case 0:
//on sort de la boucle
break;
case -1: //erreur
exit(EXIT_FAILURE);
break;
default :
//process parent
exit(EXIT_SUCCESS);
}
/** on travaille maintenant
dans le processus child
umask(0);
sid=setsid();
if(sid<0) {
perror("sid");
exit(EXIT_FAILURE);
}
if(chdir("/")<0){
perror("chdir");
exit(EXIT_FAILURE);
}
printf("Demon demarer pid=%d\n",(int)getpid());
close(STDIN_FILENO); //fermer le SHELL
close(STDOUT_FILENO);
close(STDERR_FILENO);
}
Conclusion :
Marche impec sour tous les unix-like
FREEBSD FOR LIFE
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.