Connaitre le nom d'un PID - C - Programmation
Marsh Posté le 15-07-2011 à 17:52:59
Probablement pas possible de faire ça de manière portable, mais en utilisant l'API Win32, tu peux faire un truc du genre:
Code :
|
Marsh Posté le 15-07-2011 à 18:12:33
Autant pour moi, je compile sous Windows avec cygwin, mais à destination d'un système embarqué sous linux.
Et la portabilité n'est pas de mise dans ma recherche.
Marsh Posté le 16-07-2011 à 15:01:30
Si ton programme doit fonctionner sous Linux, tu peux ouvrir le fichier "cmdline" situé dans le répertoire /proc/<pid du processus>.
Il y a un peu de traitement de chaîne pour extraire le nom de ton processus, mais cela devrait convenir.
Marsh Posté le 16-07-2011 à 17:21:00
Non, je ne peux pas.
Tout ça fonctionne bien dans un programme standard, mais dans la lib de hook que j'utilise, tout open ou fopen plante tout et je n'arrive à trouver pourquoi.
J'ai déjà la liste des processus et j'essaye donc de lire le champ COMM de stat_struct d'une façon ou d'une autre.
La seule chose qui fonctionne dans /proc/<pid>/ c'est la lecture de exe via readlink, sinon, tout le reste dépend d'un open ou fopen et donc c'est mort pour moi.
Peux-tu m'aider à compiler les fonctions de lecture de COMM sous cygwin et la libc 2.3.2 ?
Marsh Posté le 16-07-2011 à 17:59:02
Tu devrais préciser quel librairie ( librairie de hook?) tu utilises et éventuellement donner du code...
Tu dis que "open/fopen" plantent tout, tu fais des contrôles sur les retours de fonction, ou ca plante DANS la fonction?
Marsh Posté le 16-07-2011 à 18:09:19
Ca plante DANS la fonction.
Ca rentre, ca ne sort plus jamais.
Je compile sous cygwin avec :
gcc-3.3.4
glibc-2.3.2/arm-linux/bin/gcc
Je crée un hook de la fonction gettimeofday ainsi :
Code :
|
Et je charge via LD_PRELOAD=malib.so.
Quelqu'un a une idée ?
Soit de faire fonctionner fopen ou open,
Soit de remplacer par d'autres fonctions pour lire le nom du processus.
A votre bon coeur !
Marsh Posté le 17-07-2011 à 12:02:22
Si ton programme doit fonctionner sous Linux, et que tes problèmes actuels sont liés à Cygwin, n'aurais-tu pas intérêt à le développer directement dans un environnement Linux pur (dans une machine virtuelle, par exemple) ? J'ai l'impression que tu introduis plein de difficultés inutiles, à travailler dans un environnement inadapté...
Marsh Posté le 17-07-2011 à 12:27:52
Devant l'insistance des gurus d'ici et d'ailleurs, j'ai fini par aller chez un ami compiler sous ubuntu, du pur linux et ...
... tout pareil !!!
Maintenant quelles solutions me restent-ils ?
Je vais finir par abandonner l'idée de ce soft.
Il n'y a personne qui compile ce type de code ici ?
Marsh Posté le 17-07-2011 à 13:03:38
Ton programme, en fait, il correspond à quel genre de programme (désolé je suis nul en prog linux)?
- un programme ou librairie charger dans chaque autre programme pour modifier l'usage de gettimeofday qu'ils ont? -> peut être n'ont ils pas les droits de partage suffisant pour fopen?
- un driver? -> même si c'est pas un driver, si la lib se charge trop tôt est ce que fopen peut agir ou simplement exister a ce niveau là?
Marsh Posté le 15-07-2011 à 17:21:14
Bonjour,
Je compile sous cygwin.
J'arrive à lister tous les processus actifs par leur PID.
Je cherche à connaitre le nom des processus à l'intérieur d'un programme C, donc pas de ps ou autre chose dans un bash shell.
Je suis dans un hook et je n'ai donc pas la possibilité de faire un open ou fopen, cela bloque tout sans raison, mais je ne trouve pas la source du problème.
Je cherche donc à lire le nom du processus par d'autres moyens, mais je n'arrive pas le faire sous cet environnement.
Donc si quelqu'un peut m'aider à compiler les fonctions suivantes en cygwin, merci du coup de main :
1. find_task_by_pid ou find_task_by_vpid,
2. get_task_comm.
#include <linux/sched.h> ne fonctionne pas sous cygwin, donc pas d'accès aux fonctions permettant de lire un struct task_struct.
Merci pour votre aide.