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

C++ Discussion :

Faire un exécutable / daemon


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Faire un exécutable / daemon
    Bonjour,

    Comment peut-on fait un exécutable qui se comporte comme un daemon et ensuite pouvoir lui envoyer des commandes via la console ?

    Par exemple :
    1) Mon appli n'est pas lancés
    2) Ligne de commande "myapp action params"
    => MyApp fork alors un process, lui envoie "action params" et le laisse tourner
    3) Ligne de commande "myapp action2 params2"
    => MyApp récupère le process forké et lui envoie "action2" params2

    L'idée est d'avoir un comportement comme l'utilitaire pm2 qui gère les lancements / arrêts / redémarrage, status etc. d'application NodeJS.

    Il s'utilise comme ça en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    pm2 start myApp1.js
    pm2 start myApp2.js
    pm2 start myApp2.js
    pm2 status (affiche les infos des 3 applications)
    pm2 stop myApp2
    pm2 status
    etc.
    Mais dans le main de pm2, comment ils font pour retrouver le process forké et communiquer avec lui pour balancer la commande en question ?

    Si vous avez un squelette, pour Windows ou linux peu n'importe ça m'arrangerait bien

    Merci,

    A bientôt

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Le principe consiste au second lancement de l'application de détecter qu'elle est déjà en mémoire,
    puis de transmettre la commande à la première instance
    et arrêter la seconde instance.

    Pour cela, il existe des moyens différents sous Windows (par recherche de la fenêtre globale) ou Posix (recherche du process dans /proc).
    Comme la seconde opération consiste à communiquer avec la première instance, il est surement plus simple de créer un canal de communication de d'identifier le canal plutôt que l'application.

    Sous QNX, j'utilise la création d'un 'named channel' par name_open() et name_attach().
    Sous linux il doit y avoir un équivalent.
    Sous Windows, le FindWindow() est simple à mettre en place, on envoi des messages à la fenêtre.
    Avec Qt, il existe peut-être des objets pré-définis.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Trouver le process n'est en soit pas quelque chose de compliqué, mais c'est ensuite pour dialoguer avec lui que je ne sais pas comment faire.

    J'utilise ZMQ pour différentes raisons, et ils gèrent un protocole "inproc//procname", sauf que l'appelant et l'appelé doivent partager le même contexte (donc de la donnée commune aux deux process). Comment faire ça ?

    Merci,

    A bientôt

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Sous Windows, le FindWindow() est simple à mettre en place, on envoi des messages à la fenêtre.
    Ça, c'est du bricolage, même dans les années 80.

    L'équivalent des daemon UNIX sous Windows, c'est les Services Windows.

    Vous pouvez gérer l'exécution/arrêt d'un Service ainsi que les gestions de ces paramètres avec les API de gestion des Services Windows.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    C'est un "moitié service" dont j'ai besoin, comme PM2 qui crée un process enfant à la première commande et le récupère lors des commandes suivantes pour les lui transmettre. Et l'exécutable n'a pas d'interface graphique, donc pas moyen d'utiliser le FindWindow et je confirme ça aurait été très très moche de faire ça.

    Finalement je m'en suis sorti avec ZMQ et du protocol TCP basique et ça peut même être extensible à l'avenir dans la mesure où ce "service" tournera sur plusieurs machines pour attaquer l'une ou l'autre.

    Merci quand même,

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 04/07/2008, 11h20
  2. [Système] Faire 2 exécutions
    Par auremax dans le forum Langage
    Réponses: 1
    Dernier message: 11/01/2008, 03h36
  3. [LibertyBasic] Comment faire un exécutable ?
    Par Shugo78 dans le forum Basic
    Réponses: 5
    Dernier message: 09/07/2007, 16h22
  4. Comment faire un exécutable d'une application access
    Par b_steph_2 dans le forum Runtime
    Réponses: 4
    Dernier message: 09/02/2006, 16h21
  5. makefile ... comment faire plusieurs exécutables !
    Par fregate dans le forum Systèmes de compilation
    Réponses: 9
    Dernier message: 18/12/2005, 16h14

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