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

Réseau C Discussion :

pid du process parent du file descriptor du socket


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut pid du process parent du file descriptor du socket
    Bonjour,

    Dans une simple appli client/serveur, je crée une socket à un moment et je souhaiterais à partir du numéro de file descriptor de ce socket connaître le pid du processus parent de ce descripteur.

    Une piste serait la bienvenue car je n'arrive pas à trouver mon bonheur auprès de mon ami google

    Merci !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Lu,

    J'ai pas trop compris ce que tu voulais faire mais pour le pid du processus parent il existe la fonction getppid().

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    Merci mais ce n'est pas comme ça que j'obtiendrais ce que je veux en fait . Avec getppid() tu obtiens le processus parent du processus courant et ce n'est pas ce que je veux. Je veux le processus parent d'un descripteur donné.
    J'ai envisagé lsof qui permet de lister tous les descripteurs ouverts avec le pid associé( ce que je veux) mais j'ai laissé tomber cette approche car on peut avoir plusieurs processus travaillant sur un même descripteur alors pour trouver le bon ... !

    Tampis !!!

  4. #4
    Invité
    Invité(e)
    Par défaut
    As tu trouvé ton bonheur ?
    Je regarde un peu la même chose, mais pas pour les mêmes raisons.

    En gros, moi je voudrais connaître le parent d'un process php, lancé par apache ou non ...

    J'ai vu qu'il existait ça en perl :

    $sret = "Parent";
    $sret = "Current" if ($ARGV[0] eq 0);

    print "$sret PID is " . getpgrp($ARGV[0]) . "\n" ;

    Mais j'ai un gros doute en fait .
    Si tu mets 0, le PID est celui du process.

    Si tu passes en argument le PID d'un process apache, tu en trouves bien le père, le process lancé par root, alors que les autres se lancent en www-data.

    Pareil si tu l'utilises sur un processus gnome, il te renverra sur le parent qui est le process de ta session gnome.

    Comme dit plus haut ... j'ai un doute sur le résultat de la fonction, même si la, il a l'air bon.

    Mais pour moi, je ne suis pas sur que ce soit utile, car en fait, mon process php, se lance via suphp. Mais quelques fois j'ai des process PHP que j'arrive à killer, mais dans d'autres cas, il dépendent du process apache parent.

    Je n'ai pas encore réussi à vérifier que le process parent de mon PHP, est bien le process APACHE correspondant où si en fait le parent était le process suphp .

    J'espère t'avoir aidé quand même.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par marion5515 Voir le message
    Dans une simple appli client/serveur, je crée une socket à un moment et je souhaiterais à partir du numéro de file descriptor de ce socket connaître le pid du processus parent de ce descripteur.

    Une piste serait la bienvenue car je n'arrive pas à trouver mon bonheur auprès de mon ami google Merci !
    C'est parce que tu t'emmêles probablement les pinceaux dans ces différentes notions. J'imagine que ce que tu veux faire, c'est que lorsqu'un client se connecte à ton serveur, celui-ci soit capable de déterminer quel est le processus qui l'a appelé.

    D'abord, ce n'est pas un processus « parent » (donc, chercher avec ce terme ne te mènera vers rien de bon). Ensuite, chaque socket est propre à un processus. Lorsqu'une connexion est établie, il y a un socket ouvert du côté serveur, et un autre du côté client, de la même façon que, lorsque tu téléphones à quelqu'un, il y a une prise de téléphone chez toi et une autre chez ton correspondant. Ces sockets sont complètement privés et ne peuvent donc pas être déterminés avec des fonctions standard. En outre, chaque numéro est propre au processus. Donc, le numéro d'un socket — en lui même — ne te donnera aucune indication sur le correspondant qui l'exploite. La relation est faite par le système, en dehors du processus.

    Enfin, et c'est le plus important, tu ne peux pas garantir que tu vas pouvoir identifier le processus client… pour la bonne raison qu'il ne tourne pas forcément sur la même machine ! Une connexion réseau TCP s'exploite à travers les sockets, elle aussi.


    Dis-nous pourquoi tu cherches à faire cela, car il y a de fortes chances qu'il s'agisse d'une erreur de conception, auquel cas on t'orientera vers la bonne voie. Si tu as de bonnes raisons de vouloir le faire, soit tu établis un protocole de communication pour que ton processus s'identifie de lui-même aurpès du serveur (« Je suis le processus № n »), soit tu utilises les fonctions de ton système, comme celles utilisées par lsof pour le déterminer de façon indirection. Généralement, on trouve la liste des descripteurs de fichiers ouverts sous Unix dans « /proc » (sur SysV).


    Enfin, si ce que tu veux faire, c'est obtenir un état des connexions ouvertes sur ta machine à des fins d'administration système, il existe une commande : netstat.

Discussions similaires

  1. Erreur : Bad file descriptor sur socket
    Par TariC dans le forum Réseau
    Réponses: 2
    Dernier message: 22/11/2010, 20h31
  2. Obtenir le PID du process java
    Par manutudescends dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2006, 18h25
  3. Coment obtenir le nombre total de file descriptor ouvert?
    Par homeostasie dans le forum Réseau
    Réponses: 7
    Dernier message: 21/06/2006, 11h55
  4. Bad file descriptor avec un read()
    Par je®ome dans le forum C
    Réponses: 2
    Dernier message: 04/04/2006, 19h30
  5. Etrange "Bad file descriptor"
    Par amauryxiv dans le forum Langage
    Réponses: 23
    Dernier message: 01/02/2006, 03h20

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