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 :

Récupérer processus avec PID


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Récupérer processus avec PID
    Bonsoir,

    Je souhaiterai récupérer le processus utilisé par un programme et lui créer un processus fils.
    Ainsi, je pourrai "ajouter" des actions en plus à ce programme sans le modifier.

    Ma question est donc la suivante :
    Est-t-il possible de récupérer un processus si je connais son PID ?

    Merci d'avance.

    Benjamin

  2. #2
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Russie

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    Excuse moi, que veux tu dire par : 'Récupérer le processus' ?
    Pour avoir le PID : pid_t * getpid()
    Sinon, tu peux utiliser ceci pour créer plusieurs processus dans un même programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <unistd.h>
    int main(void)
    {
      pid_t child;
      child = fork();
      if(getpid()==child)
      { code du fils; }
      else
      { code du père; }
      return 0;
    }
    En espérant que cela t'ai aidé.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Russie

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    En relisant ton message, j'ai compris ce que tu voulais faire, mais c'est impossible (sinon tu pourrais le faire pour tout et n'importe quoi, et ça aurait un sérieux impact sur la sécurité)
    Mais si tu veux faire ça avec des programmes créés par toi, tu devrais pouvoir le faire, mais je ne sais pas du tout comment.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Effectivement, ce que je souhaiterai en fait, c'est créer des processus fils à Firefox afin qu'il exécute des actions définies lors de l'appui sur certaines touches du clavier.

    Benjamin

  5. #5
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Russie

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    Alors là je ne peux plus t'aider, désolé. (Je programme plutôt en bas niveau)
    En espérant que tu trouves la réponse à ta question

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 395
    Points : 23 756
    Points
    23 756
    Par défaut
    Bonjour,

    Citation Envoyé par bappr Voir le message
    Effectivement, ce que je souhaiterai en fait, c'est créer des processus fils à Firefox afin qu'il exécute des actions définies lors de l'appui sur certaines touches du clavier.
    Benjamin
    En fait, obtenir un handle sur un processus pour le modifier est possible, à condition d'en avoir le droit. Seulement, ça n'a rien à voir avec le fait de créer des processus fils et encore moins avec le fait d'ajouter des fonctionnalités à la volée à un programme. Es-tu sûr de bien comprendre comment tout cela fonctionne ?

    Si tu veux faire faire certaines choses à Firefox, le mieux est encore de lui créer une extension personnalisée. Elles servent à cela. Sinon, tu peux toujours écrire un peu de Javascript pour lui faire faire, voire utiliser la console. Sinon, si ça ne suffit toujours pas, Firefox est un logiciel libre et tu peux te plonger dans les sources. Les binaires purs sont peu nombreux. La majeure partie de l'interface est écrite en Javascript.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci de vos réponses.

    Effectivement, Obsidian je mets les deux pieds dans un monde un peu inconnu donc non, je ne suis pas du tout sur de moi.

    J'aurais pensé qu'en créant un nouveau processus fils à Firefox, ce processus "garderait la main" (à prendre avec des pincettes) et ainsi "écouterait" mes ordres pour exécuter certaines actions.

    Utiliser la console et modifier le Javascript ne me servira probablement pas.
    Je vais donc me pencher un peu plus sur l'écriture d'une extension Firefox.

    Concernant l'obtention d'un handle sur un processus pour le modifier, peux-tu stp m'en dire un peu plus ?

    Merci de ton aide.

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 395
    Points : 23 756
    Points
    23 756
    Par défaut
    Citation Envoyé par bappr Voir le message
    Merci de vos réponses.

    Effectivement, Obsidian je mets les deux pieds dans un monde un peu inconnu donc non, je ne suis pas du tout sur de moi.

    J'aurais pensé qu'en créant un nouveau processus fils à Firefox, ce processus "garderait la main" (à prendre avec des pincettes) et ainsi "écouterait" mes ordres pour exécuter certaines actions.
    — Un processus est un programme en langage machine, en cours d'exécution, pris en charge par le système d'exploitation, et dont le contexte est préservé lorsque l'on passe de l'un à l'autre.
    — Un processus « fils » est un processus lancé par un autre. Cela reste quand même malgré tout un programme complètement indépendant du premier. Le lien de parenté tient à ce qu'outre le fait que ton programme a été engendré par un autre, nommé « père » par principe, ce nouveau processus hérite des droits, descripteurs, etc. du père (dont il peut disposer si ça lui chante) et surtout parce qu'il appartient à la même session, et a officiellement un processus père dont on obtient le PID avec getppid() sur les systèmes POSIX. Ça permet formellement à celui-ci de recevoir un signal lorsqu'un de ses fils se termine, de pouvoir faire wait() dessus pour se mettre en attente et récupérer le code de retour, et éventuellement de tuer automatiquement les fils si le père prend fin, par exemple lorsque tu fermes un terminal dans lequel tourne un programme.

    Par contre, un processus peut très bien demander à ne pas être fermé lorsque ça se produit. Dans ce cas, il se retrouve orphelin, et est automatiquement rattaché au processus init (PID « 1 »). On peut aussi, par d'habiles montages, rattacher un processus à un autre en lui désignant un père.

    MAIS il est évident que faire ce genre de manip' ne va pas automatiquement « ajouter des fonctionnalités » à un programme existant. Les deux vivent leur vie indépendamment et si l'un n'est pas conçu pour interagir avec l'autre, et a fortiori s'il n'est même pas au courant qu'on vient de lui rattacher un fils, il n'y a aucune raison pour qu'il se passe quoi que ce soit. Ce n'est pas forcément idiot en soi : les plugins GIMP fonctionnent quand même de cette manière : des exécutables autonomes qu'il suffit de déposer dans un répertoire dédié : ils sont lancés par GIMP eux-mêmes et sont donc, de fait, très faciles à écrire et à compiler. Mais il faut que le logiciel soit prévu pour cela à la base et que ton programme exploite les bonnes API.

    D'autre part, je ne sais pas comment tu as prévu de lire les touches mais celles-ci ne proviendront pas de l'entrée standard stdin, ni d'un flux C habituel. Donc exit les getchar(), scanf() et fgets(). Ça aurait pu être une bonne idée quand même, puisque les différents processus sont rattachés par défaut à la même console, mais ça t'aurait déjà posé des problèmes puisqu'une fois un caractère lu par un processus, il ne peut plus l'être par un autre.

    Firefox et les interfaces graphiques utilisent l'environnement graphique de la machine-hôte, par exemple X-Window sous Unix, et celui-ci génère des événements qui se propagent à travers tout ce qui est à l'écoute. Donc, tu as un modèle natif (utilisable en langage machine) tout-à-fait similaire à celui mis en place par le Javascript de son côté, et même par le Java. Les appuis sur les touches seront des des événements au même titre que les clics souris.

    Utiliser la console et modifier le Javascript ne me servira probablement pas.
    Je vais donc me pencher un peu plus sur l'écriture d'une extension Firefox.
    Tu pourrais nous dire, surtout, ce que tu veux faire exactement, histoire que l'on puisse déplacer ton fil dans la section la plus appropriée ?

    Concernant l'obtention d'un handle sur un processus pour le modifier, peux-tu stp m'en dire un peu plus ? Merci de ton aide.
    Il faut cliquer sur le lien « est possible » de mon précédent post. Ça dépend du système d'exploitation que tu utilises (et donc ce ne sera pas portable). Tu as OpenProcess() sous Windows et ptrace() sous Unix. Mais il y a de fortes chances pour que cela ne te serve à rien.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    Ça m'éclaire beaucoup plus sur le sujet, effectivement, j'étais loin d'avoir tout compris.
    Je te remercie pour ta réponse.

    Du coup, je me suis orienté vers une solution beaucoup plus simple. On m'a donné le nom d'une extension qui permet de charger du Javascript "dynamiquement".
    Je l'ai utilisé et tout fonctionne parfaitement.

    Merci pour votre aide.

    Benjamin

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

Discussions similaires

  1. Piper processus avec pid
    Par CAThanatos dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 22/07/2010, 19h37
  2. Réponses: 4
    Dernier message: 22/11/2007, 10h34
  3. Lancer un processus avec un PID donné
    Par bigsister dans le forum Linux
    Réponses: 8
    Dernier message: 08/11/2007, 13h00
  4. Réponses: 1
    Dernier message: 03/12/2006, 10h16
  5. Lancement de processus avec priorité
    Par GMI3 dans le forum Administration système
    Réponses: 2
    Dernier message: 14/06/2004, 16h43

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