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

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Points : 46
    Points
    46
    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 éminent sénior

    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
    Points : 17 923
    Points
    17 923
    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 du Club
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Points : 46
    Points
    46
    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 confirmé

    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
    Points : 646
    Points
    646
    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 du Club
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Points : 46
    Points
    46
    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 confirmé

    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
    Points : 646
    Points
    646
    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 du Club
    Inscrit en
    Août 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 93
    Points : 46
    Points
    46
    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 confirmé

    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
    Points : 646
    Points
    646
    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.
    ++

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    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 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bizulk Voir le message
    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.
    ++
    J'arrive un peu tard (comment ai-je raté ce topic ???) mais je peux apporter quelques précisions
    - les socket => l'avantage c'est que le protocole est analogue au protocole TCP/IP => tu pourras plus tard faire évoluer ton code pour qu'il traverse le réseau
    - queues de messages et mémoire partagée => utile s'il n'y a pas unité de temps entre l'écriture et la lecture => le processus écrivain peut avoir disparu depuis des jours, la donnée est toujours présente pour une lecture. La file de message permet en plus de rajouter une mécanisme simpliste de "tri" des informations que ne permet pas la mémoire partagée.
    - tubes nommés => la base de la communication entre processus Unix. Un processus ouvre le tube pour écrire dedans et l'autre va lire les données écrite. On pourrait faire pareil avec un simple fichier mais le tube offre l'avantage d'apporter un mécanisme automatique de verrou

    Voir les cours et tutoriels Linux : http://linux.developpez.com/cours/

Discussions similaires

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

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