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 :

Inter process communication


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Par défaut Inter process communication
    Salut à tous !
    Je viens à vous pour obtenir quelques conseils à propos de la communication inter-processus sous Linux.
    Mon souhait est d'implémenter une solution portable et la moins restrictive possible pour communiquer sans encombres entre deux processus indépendants.
    Apparemment il y a pas mal de façons de faire , sémaphore, "pipe name " (restrictive sur la longueur des messages apparemment ... ), les queues ....

    J'aimerai l'avis de quelques spécialistes pour partir dans la bonne direction....
    La solution du sémaphore me parait peut-être la plus adaptée (mais en même temps c'est la seule que je connaisse clairement ... ). Je cherche avant tout la portabilité.

    Voilà ! Merci pour vos lumières !

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tout dépend communiquer quoi, avec quelles contraintes..

    Tu as aussi mémoire partagée, sockets, etc etc..

  3. #3
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Par défaut
    j'aimerais communiquer à un processus le fait qu'un autre processus indépendant a subit une action et faire savoir que ça tache est bien terminée pour que le premier processus puisse ensuite effectuer sa tache...
    En fait Dès que le second processus a effectuer sa tache il faudrait qu'il puisse avertir le premier. Mes deux processus sont sensés être complètement indépendants....

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Par défaut
    qu'est ce que tu souhaites en terme de portabilité : inter-unix ou unix/windows ? choisir la solution posix serait le plus sage a mon avis.
    intrinsèquement parlant tu souhaites 'synchroniser' l'exécution de tâches et non faire des échanges de données.
    dans ce cas utilise les semaphore/mutex (il y a un cours bien fait dans la section linux de developpez.com).
    si tu veux un fonctionnement complètement asynchrone alors il te faudra utiliser par exemple les signaux pour notifier un processus d'un evènement particulier et exécuter un code en particulier.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Par défaut
    je cherche pour commencer une portabilité inter-unix et effectivement les processus fonctionneront sur un mode asynchrone, d'autre part il me faudrait également un échange de données entre les deux processus.

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Par défaut
    Citation Envoyé par swingNJava Voir le message
    j'aimerais communiquer à un processus le fait qu'un autre processus indépendant a subit une action et faire savoir que ça tache est bien terminée pour que le premier processus puisse ensuite effectuer sa tache...
    En fait Dès que le second processus a effectuer sa tache il faudrait qu'il puisse avertir le premier. Mes deux processus sont sensés être complètement indépendants....
    Si tu dis qu'un processus attend qu'un autre termine sa tache pour realiser une action alors tu les synchronises par une sémaphore. L'exécution de l'un sera suspendu jusqu'à ce que l'autre libère le sémaphore.
    Tu as une explication et des exemples ici

    Si cela ne te convient pas je te prierai d'expliquer pourquoi et surtout de préciser ta question. Merci.

  7. #7
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Par défaut
    Merci pour toutes ces réponses ! Après quelques tests, je suis convaincus que les sémaphores représentent une solution simple et portable sur les unixoïdes pour la synchronisation. La dernière question que je me pose est comment communiquer des données de l'un au l'autre ? par exemple envoyer le résultat du processus attendu à celui en attente..... toujours dans un soucis de propreté et de portabilité ...
    Merci !

  8. #8
    Membre éclairé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Par défaut
    Tu as pleins de méthodes tout dépend de la façon dont tu souhaites les faire communiquer et synchroniser les données, ainsi que leur nature.
    mettons par exemple une structure :
    _ socket unix
    _ queue de message
    _ mémoire partagés
    _ Tubes nommés (jamais utilisé)
    ...

    toutes on un avantage/inconvenient, a toi de faire le choix selon la façon dont tu souhaites traiter les données.
    Avec les sockets tu auras une architecture de comm du type serveur/client. A etudier la bufferisation des données non lues.
    Avec les queues de messages : la comm est tout a fait asynchrone, la donnée consommée disparaît. A Etudier : les variations consommation/production de données : tes queues vont se remplir plus ou moins vites. Tu peux donner des priorités à tes messages.
    Mémoire partagée : la taille de la ressource occupée est fixée dès le départ. Les processus sont complètement indépendant pour l'
    utilisation de cette ressource. Les processus doivent connaître le codage des données dans cette mémoire. Dans certains cas Il te faudra préserver l'intégrité des données avec une sémaphore. Si tu codes une structure dans cette mémoire, tu ne liras que les dernières modifications, contrairement à une queue de message.

    Tu peux voir le cours qui explique ces objets systèmes dans le lien que je t'ai passé auparavant.
    ++

Discussions similaires

  1. Inter process Communication
    Par Abbadon1988 dans le forum Général Java
    Réponses: 3
    Dernier message: 03/02/2011, 23h55
  2. Communication inter process
    Par thegitch dans le forum C#
    Réponses: 9
    Dernier message: 03/07/2009, 13h23
  3. Communication Inter Process C# C++
    Par Moustico dans le forum C++/CLI
    Réponses: 3
    Dernier message: 13/03/2009, 13h49
  4. Réponses: 18
    Dernier message: 04/02/2008, 11h20
  5. WMI pour communication inter process
    Par dominoz dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 20/08/2007, 13h53

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