IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Comment faire tourner un programme en background?


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 40
    Points
    40
    Par défaut Comment faire tourner un programme en background?
    Salut tout le monde !
    Je travaille sous linux et j' ai un programme écrit en C,
    et je voudrai faire tourner ce programme en background,et se lance automatiquement a chaque démarrage de la machine, une sorte de démon quoi!
    Mais je ne sait pas comment proceder!
    Donc si vous avez qlq idées je suis preneur?
    Merci et A+

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 13
    Points
    13
    Par défaut
    Bonjour,
    Pour mettre ton code en background tu peux tester ceci :

    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
     
     
    int main()
    {
      pid_t pid;
     
      if(pid =  fork()) 
      { 
         /* On quitte le processus père */
         exit(0); 
      } 
      else 
      { 
       /*  On rend le fils indépendant de tout terminal */
       setsid(); 
     
      /* Ici met ton programme */
     
      }
      return (0);
    }
    Pour info :
    man setsid
    man fork

    Pour ce qui est de lancer un programme au démarrage de linux, tout dépend si tu veux lancer le programme au démarrage de l'ordi ou de la session.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par cyranno Voir le message
    Salut tout le monde !
    Je travaille sous linux et j' ai un programme écrit en C,
    et je voudrai faire tourner ce programme en background,et se lance automatiquement a chaque démarrage de la machine, une sorte de démon quoi!
    Mais je ne sait pas comment proceder!
    Donc si vous avez qlq idées je suis preneur?
    Merci et A+
    Bonjour,

    je pense que tu n'es pas sur le bon forum.

    si j'ai bien compris , ton programme est déjà écrit en C et t'as que le binaire.

    Pour lancer un script en arrière plan, et ainsi reprendre la main sur le terminal, il suffit de le faire suivre par le caractère "esperluette" ( & )

    Cordialement,

    Turbo_chess

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Tu n'es pas sur le forum. Tu auras plus de chance de trouver une réponse rapide par ici.
    http://www.developpez.net/forums/forumdisplay.php?f=17

    En attendant, tu peux déjà lire ceci. L'écriture et la mise en place d'un démon y sont expliquées.
    http://www.lea-linux.org/cached/inde...t-daemons.html
    Obligation d'être root bien sûr.

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par aoyou Voir le message
    Obligation d'être root bien sûr.
    Et moi qui pensais que la premiere mesure de securite etait de ne pas faire tourner les demons comme root.

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 123
    Points
    28 123
    Par défaut
    Bonjour,

    Pour lancer un programme en arrière plan et qu'il ne soit plus attaché à la console, il faut le lancer avec nohup (à moins que le programme ne se démonise lui-même, comme par exemple avec la méthode de BaZoR) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nohup ~/le/bon/chemin/mon_programme [mes arguments] &
    Ensuite, pour le lancer automatiquement au démarrage, je te conseil de faire une recherche sur ce forum, tu y trouveras pleins de sujets traitants de ce que tu souhiates faire.
    Tu peux aussi regarder dans le forum de ta distribution, car il existe aussi des solutions spécifiques.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    On peut lancer le processus père en root puis basculer en "effective user" lambda.

    En principe pour un demon unix :
    fork
    fork
    setsid
    cd / (chroot au besoin pour un "jail daemon")
    umask
    seteuid

    Après il faut aussi gérer les flux stdin/out/err, les handlers de signaux ... etc


    Plus d'explications :
    http://lionel.tricon.free.fr/Article...icle_demon.pdf

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 40
    Points
    40
    Par défaut
    Salut!
    Je vous remercie pour vos réponses!
    ça y est mon programme peut s'exécuter en background!
    Mais comment faire pourqu'il se lance automatiquement a chaque démarrage du systéme.
    Merci et A+

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par tamiel Voir le message
    Salut!
    J'ai lu le doc mais j'ai encore quelque probléme au niveau du script de démarrage du démon dans /etc/init.d/MonDemon
    Il peut se lancer au démarrage mais je n'arrive pas a l'arréter avec:
    /etc/init.d/MonDemon stop
    Voici mon script:
    #! /bin/sh

    PATH=/bin
    DAEMON=/bin/MonDemon
    NAME=Diable
    DESC="Démon"

    test -x $DAEMON || exit 0

    set -e

    case "$1" in
    start)
    echo -n "Starting $DESC: "
    MonDemon
    ;;
    stop)
    echo -n "Stopping $DESC: "
    start-stop-daemon --stop --quiet --exec $DAEMON
    echo "$NAME."
    ;;
    esac
    exit 0
    quand on stoppe le démon,il y a l'erreur:start-stop-daemon command not found
    Pouvez-vous me donner un petit coup de main!
    J'ai pensé au commande kill mais comment peut on avoir le PID du démon,
    puisque si on fait ps -a le démon ne s'y trouve pas.
    Merci encore et A+

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Tu peux récupérer le pid dans le deuxième fork dans le processus de mise en démon.
    Il suffit d'écrire ce pid dans un fichier

    Example du man de fork :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
               pid_t   pid;
     
               pid = fork ();
     
               if (pid > 0) {
                    /* Processus père      */
               } else if (pid == 0) {
                    /* Processus fils      */
               } else {
                    /* Traitement d'erreur */
               }

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cyranno Voir le message
    Salut!
    J'ai lu le doc mais j'ai encore quelque probléme au niveau du script de démarrage du démon dans /etc/init.d/MonDemon
    Il peut se lancer au démarrage mais je n'arrive pas a l'arréter avec:
    /etc/init.d/MonDemon stop
    Voici mon script:

    quand on stoppe le démon,il y a l'erreur:start-stop-daemon command not found
    Pouvez-vous me donner un petit coup de main!
    J'ai pensé au commande kill mais comment peut on avoir le PID du démon,
    puisque si on fait ps -a le démon ne s'y trouve pas.
    Merci encore et A+
    J'ai jamais trop examiné en détail le contenu de "init.d" mais il me semble, en ayant regardé d'assez loin certains scripts, que chaque script va écrire le pid du daemon lançé quelque part. Et pour le "stop", il lui suffit de faire un "kill -15" du pid écrit...

  13. #13
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 40
    Points
    40
    Par défaut
    ça y est j'ai trouvé la solution a mon probléme,c'est une probléme de path sur
    start-stop-daemon:
    #! /bin/sh

    PATH=/bin
    DAEMON=/bin/MonDemon
    NAME=Diable
    DESC="Démon"

    test -x $DAEMON || exit 0

    set -e

    case "$1" in
    start)
    echo -n "Starting $DESC: "
    /sbin/start-stop-daemon --start --exec $DAEMON
    ;;
    stop)
    echo -n "Stopping $DESC: "
    /sbin/start-stop-daemon --stop --exec $DAEMON
    echo "$NAME."
    ;;
    esac
    exit 0
    Merci à tous!!!

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 40
    Points
    40
    Par défaut
    ça y est j'ai trouvé la solution a mon probléme,c'est une probléme de path sur
    start-stop-daemon:
    #! /bin/sh

    PATH=/bin
    DAEMON=/bin/MonDemon
    NAME=Diable
    DESC="Démon"

    test -x $DAEMON || exit 0

    set -e

    case "$1" in
    start)
    echo -n "Starting $DESC: "
    /sbin/start-stop-daemon --start --exec $DAEMON
    ;;
    stop)
    echo -n "Stopping $DESC: "
    /sbin/start-stop-daemon --stop --exec $DAEMON
    echo "$NAME."
    ;;
    esac
    exit 0
    Merci à tous!!!

Discussions similaires

  1. Z/Os ; MVS + comment faire tourner un programme JAVA ?
    Par piboula dans le forum Langage
    Réponses: 2
    Dernier message: 28/07/2009, 17h16
  2. Faire tourner un programme C en background
    Par Yunchi dans le forum Débuter
    Réponses: 5
    Dernier message: 31/03/2009, 12h16
  3. Comment faire tourner un programme en C sous linux ?
    Par petitclem dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/06/2008, 17h49
  4. faire tourner un programme C en background sous windows
    Par Filomenom dans le forum Windows
    Réponses: 10
    Dernier message: 17/02/2006, 18h16
  5. Comment faire patienter un programme ?
    Par JlouisI dans le forum Débuter
    Réponses: 4
    Dernier message: 03/03/2003, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo