begin process at 2012 02 12 08:49:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > DAEMON UNIX-LIKE

DAEMON UNIX-LIKE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :demon, unix, processus, interne Niveau :Débutant Date de création :12/01/2007 Date de mise à jour :12/01/2007 22:53:36 Vu / téléchargé :9 152 / 179

Auteur : xtremejames183

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

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

  • #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);
  • }
#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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

12 janvier 2007 22:15:57 :
correction du code
12 janvier 2007 22:53:36 :
puts

 Sources du même auteur

Source avec Zip Source avec une capture COMPRESSION FICHIERS ALGORITHME HUFFMAN C
Source avec Zip Source avec une capture CLEX ANALYSEUR LEXICALE DU LANGAGE C
ITOA FAIT MASION: COVERSION ENTIER 32 BIT NON SIGNE VERS CHA...
Source avec Zip COMBSORT ALGORITHME DE TRI SIMPLE RAPIDE NON-RECURSIF
Source avec Zip Source avec une capture SHAMAN LIBRAIRIE DE HASH SUPPORTANT SHA1 SHA256 SHA384 SHA51...

 Sources de la même categorie

Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10
Source avec Zip PETITE CLASSE DE GESTION DES PROCESSUS SOUS WINDOWS par wisar
Source avec Zip KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FO... par wisar
Source avec Zip LINUX USB BOOT LEGER par patatalo

 Sources en rapport avec celle ci

LIBRAIRIE POUR SOCKETS C++ par genetApt151
UNIX : LISTER LE NOMBRE DE PROCESSUS TOURNANT SUR LA MACHINE par jojo930
Source avec Zip Source avec une capture LISTE PROCESSUS V2 (WIN64) par BruNews
PROCESS DUMPER par lilxam7
Source avec Zip INJECTION DE DLL DANS UN PROCESSUS par lilxam7

Commentaires et avis

Commentaire de Lalee le 12/01/2007 22:22:54

Si tu faites close(STDOUT_FILENO); Comment pourrait le puts() functioner?

Commentaire de xtremejames183 le 12/01/2007 22:50:36

salut,
je sais  tu dois supprimer ou commenter les 3 close pour que le puts fonctionne.
c'est un example le puts ne doit jamais apparaitre dans la boule infini du demon

Commentaire de exar le 18/01/2007 07:13:40

Très bien ! Il y a longtemps que je cherchais ça !
Merci !

Commentaire de adduke le 04/02/2008 18:37:14 10/10

Magnifique  !!!

Commentaire de adduke le 04/02/2008 18:41:34

En dehors d'un KILL, y a t-il une façon de fermer le démon proprement ?

Commentaire de exar le 13/02/2008 13:24:35

A première vue, il doit y avoir moyen, mais je n'ai pas essayé... Tenvoies un signal SIGUSR1 ou SIGUSR2 et tu l'attache à un handler...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Attente de la fin d'un processus sous Unix [ par laetitiavincent ] Bonsoir tout le mondeVoilà je voudrais lancer un processus et attendre qu'il soit fini pour que le programme continue. Sous windows, ca ne me pose pas utilisation des boites aux lettres sous unix [ par amme88 ] Bonjour, j'ai un petit problème en programmation si quelqu'un peux m'aider , ben je programme en utilisant java sous UNIX, alors mon problème et le processus sous unix [ par atefensi ] Je veux vous poser quelque question sur les processus sous unixJ'ai le programme suivantMain(){ int i=0 ;If(fork()==0){i=1 ;Exit(i) ;i=2 ;}Printf("%d" fork() et ressource partagée [ par iam_myst ] Bonjour, Je voudrais créer un programme ou je souhaite partager une ressource entre un processus père et un processus fils. j'ai ma ressource déclarée variable partagé entre processus [ par facilus ] Bonjour,j'ai fais un programme en c sous unix qui consiste a creer 3 fils (avec fork) , j'ai declaré 2 variables globales leur valeurs doivent etre le detecte le lancement d'une application sous unix [ par kiliii ] je voudrais bien savoir comment ecrire un programmme en c++ pour detecter le lancement d'une application par exemple le telechargement le VOIP le vide [WIN32] Perf listage processus [ par Neo_Fr ] Bonjour, Quelqu'un saurait me dire quel est la méthode la plus rapide pour lister des process ? Process32First/Process32Next ou EnumProcess ? EnumProc probleme avec stucture [ par vercd7am ] bonjour, j'explique mon probleme. J'utilise en ce moment spatstat pour mon memoire sur les processus ponctuels. Le probleme est qu'il se montre incap surveillence de processuse [ par moslih007 ] Bonjour je dois réaliser une applications qui permet de surveiller un groupe de processus,si un des processus est abscent,le systeme doit declarer un Ressources réseau [ par mohdaef ] Bonjour J'essaye de coder une application portable (Windows/Unix) Je programme en C++ et je dois réaliser une fonction qui permet de lister toute les


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales