Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2350 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C][Windows] Récupérer le PID d'un programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C][Windows] Récupérer le PID d'un programme

n°1569856
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 16:10:08  profilanswer
 

Bonjour,
 
je suis entrain d'écrire un service en C sous windows qui récupère des demandes dans une base oracle (çà fonctionne très bien), lance une application en fonction de la demande et kill cette application si son temps d'éxecution est supérieur à une valeur donnée.
 
Ce que je voudrais faire :
au lancement de l'application (par une ligne de shell), on récupère le PID.
 
On pourra alors stocker dans la base de données (dans la ligne de la demande bien sûr) pour le récupérer ensuite et killer l'application.
 
MSDN parle d'une structure SHELLEXECUTEINFO mais je n'ai pas saisi comment la remplir ni y accéder. Ce n'est peut-être pas la solution.


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
mood
Publicité
Posté le 04-06-2007 à 16:10:08  profilanswer
 

n°1569858
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 16:12:14  profilanswer
 
n°1569863
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 16:15:31  profilanswer
 


très constructif... çà fait une demi-journée que je fais du google.


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569866
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 16:18:58  profilanswer
 

Pourquoi tu lances pas ton process avec un fork, qui te retournerait directement le pid ?


---------------
Töp of the plöp
n°1569886
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 16:39:28  profilanswer
 

fork existe sous windows ? dans quelle bibli ?


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569893
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 16:44:36  profilanswer
 

Autant pour moi;
createthread + terminer le thread si la fonction met trop de temps ?


---------------
Töp of the plöp
n°1569897
MagicBuzz
Posté le 04-06-2007 à 16:48:34  profilanswer
 

sinon, l'instruction "tasklist" permet de retourner la liste des process comme le PS d'unix.
 
par contre, elle est présente sous Vista, mais aucune idée sur les versions plus anciennes.
 
de la même façon, taskkill permet de tuer un process via son pid comme le kill d'unix.

n°1569900
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 16:51:35  profilanswer
 

oula... mais je maîtrise pas les threads moi :(
 
MagicBuzz -> çà m'oblige à parser le retour de tasklist, mais comment savoir si tel process de word (par exemple) vient d'etre lancé par mon service ou s'il était déja présent...

Message cité 2 fois
Message édité par dridri le 04-06-2007 à 16:52:49

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569903
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 16:52:22  profilanswer
 

dridri a écrit :

oula... mais je maîtrise pas les threads moi :(


Ah bah c'est le moment de s'y mettre :)

 

http://msdn2.microsoft.com/en-us/library/ms682453.aspx


Message édité par _darkalt3_ le 04-06-2007 à 16:52:53

---------------
Töp of the plöp
n°1569908
MagicBuzz
Posté le 04-06-2007 à 16:57:40  profilanswer
 

dridri a écrit :

MagicBuzz -> çà m'oblige à parser le retour de tasklist, mais comment savoir si tel process de word (par exemple) vient d'etre lancé par mon service ou s'il était déja présent...


ah ben ça va faire comme PS hein :D
 
je te conseille de suivre la méthode de darkalt, au moins t'es sûr de ce que tu fais ;)

mood
Publicité
Posté le 04-06-2007 à 16:57:40  profilanswer
 

n°1569912
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:00:30  profilanswer
 

MagicBuzz a écrit :

ah ben ça va faire comme PS hein :D
 
je te conseille de suivre la méthode de darkalt, au moins t'es sûr de ce que tu fais ;)


une méthode ? ou çà ? je ne vois qu'un lien vers msdn :o

Message cité 1 fois
Message édité par dridri le 04-06-2007 à 17:01:10

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569913
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 17:01:19  profilanswer
 

dridri a écrit :

une méthode ? ou çà ? je ne vois qu'un lien vers msdn qui ne contient meme pas d'exemple.  :o


Ma méthode c'est d'utiliser des threads :o


---------------
Töp of the plöp
n°1569916
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:03:29  profilanswer
 

_darkalt3_ a écrit :

Ma méthode c'est d'utiliser des threads :o


ah mais je suis ouvert !  :)  
cependant je ne vois pas ou je met ma ligne de commande pour lancer mon appli.


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569918
MagicBuzz
Posté le 04-06-2007 à 17:06:36  profilanswer
 

t'as regardé du côté de "CreateProcess()" et "CreateThread()" ?
 
http://www.developpez.net/forums/a [...] t-332.html
(il s'agit d'un autre problème, mais ces deux fonction sont citées)

n°1569919
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 17:06:42  profilanswer
 

dridri a écrit :

ah mais je suis ouvert !  :)
cependant je ne vois pas ou je met ma ligne de commande pour lancer mon appli.

 

C'est pas une ligne de commande, c'est du code à rajouter dans ton appli.

Message cité 1 fois
Message édité par _darkalt3_ le 04-06-2007 à 17:07:07

---------------
Töp of the plöp
n°1569920
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:07:24  profilanswer
 

MagicBuzz a écrit :

t'as regardé du côté de "CreateProcess()" et "CreateThread()" ?
 
http://www.developpez.net/forums/a [...] t-332.html
(il s'agit d'un autre problème, mais ces deux fonction sont citées)


et il est ou mon PID ?

_darkalt3_ a écrit :

C'est pas une ligne de commande, c'est du code à rajouter dans ton appli.


faut que je balance ma ligne de code quelque part n'empeche...

Message cité 1 fois
Message édité par dridri le 04-06-2007 à 17:08:02

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569922
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 17:08:04  profilanswer
 

dridri a écrit :

et il est ou mon PID ?


Ca te fait pas récuperer de pid !
 
Ca te permet de lancer ce que tu veux en tâche de fond, et de tuer la tâche si elle met trop de temps.


---------------
Töp of the plöp
n°1569923
MagicBuzz
Posté le 04-06-2007 à 17:08:42  profilanswer
 

En une seule recherche sur Google :
http://goff.nu/techarticles/develo [...] ocess.html
 
Ca ouvre une application et la tue au bout de X secondes.
 
(par contre ça à l'air d'être du C++ et pas du C)

Message cité 1 fois
Message édité par MagicBuzz le 04-06-2007 à 17:10:00
n°1569924
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 17:09:05  profilanswer
 

Ben tu te renseignes sur les thread avec les liens qu'on t'a refilé, et tu modifies ton code en conséquence [:spamafote]


---------------
Töp of the plöp
n°1569925
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:09:51  profilanswer
 

_darkalt3_ a écrit :

Ca te fait pas récuperer de pid !
 
Ca te permet de lancer ce que tu veux en tâche de fond, et de tuer la tâche si elle met trop de temps.


admettons. çà me donne un thread dans lequel je met ce que je veux. Dans mon thread je veux mettre mon appli.
Comme je suis incapable de trouver le PID de mon appli (dans mon thread), je crée donc un thread par appli.
Y'a une limite au nombre de threads ?


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569926
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:10:41  profilanswer
 

MagicBuzz a écrit :

En une seule recherche sur Google :
http://goff.nu/techarticles/develo [...] ocess.html
 
Ca ouvre une application et la tue au bout de X secondes.
 
(par contre ça à l'air d'être du C++ et pas du C)


encore du c++, galère a convertir. bon merci  :jap:


Message édité par dridri le 04-06-2007 à 17:11:20

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569928
MagicBuzz
Posté le 04-06-2007 à 17:11:01  profilanswer
 

dridri a écrit :

admettons. çà me donne un thread dans lequel je met ce que je veux. Dans mon thread je veux mettre mon appli.
Comme je suis incapable de trouver le PID de mon appli (dans mon thread), je crée donc un thread par appli.
Y'a une limite au nombre de threads ?


La limite est en fonction de la version de Windows et d'une clé de la BDR.
 
M'enfin tant que t'as pas plus de 100 process, ça devrait aller

n°1569930
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 17:12:38  profilanswer
 

dridri a écrit :

admettons. çà me donne un thread dans lequel je met ce que je veux. Dans mon thread je veux mettre mon appli.
Comme je suis incapable de trouver le PID de mon appli (dans mon thread), je crée donc un thread par appli.
Y'a une limite au nombre de threads ?


 
En fait ton thread contient un pointeur vers une fonction, qui fait ce que tu veux.
 
Oui, il y a bien sur une limite au nombre de thread (à priori celle du système)


---------------
Töp of the plöp
n°1569931
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:13:04  profilanswer
 

MagicBuzz a écrit :

La limite est en fonction de la version de Windows et d'une clé de la BDR.
 
M'enfin tant que t'as pas plus de 100 process, ça devrait aller


tu veux dire thread donc.
Va falloir que je me trimballe des pointeurs sur mes threads pour pouvoir les retrouver. çà va être fun çà.
La question de départ est quand même : "je veux récupérer le PID de l'appli que je viens de lancer".


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569933
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 17:13:58  profilanswer
 

dridri a écrit :

Va falloir que je me trimballe des pointeurs sur mes threads pour pouvoir les retrouver. çà va être fun çà.


en fait des handles
 

dridri a écrit :

La question de départ est quand même : "je veux récupérer le PID de l'appli que je viens de lancer".


A priori ca peut pas marcher comme ca .


---------------
Töp of the plöp
n°1569935
MagicBuzz
Posté le 04-06-2007 à 17:16:01  profilanswer
 

Nan, le truc que je t'ai filé en exemple, c'est bien des PROCESS et pas des THREADS.
 
Si WORD tourne dans un THREAD, tu le verras de toute façon dans le gestionnaire des tâches, alors que là il y est.
 
Darkalt3 me corrigera si je dis une connerie.
 
Mais en tout cas, si y'a bien une diff entre "CreateThread" et "CreateProcess" c'est pour une raison :spamafote:
 
PS : Et je vois pas en quoi mon lien te pose problème... Tu demandes combien de cuillères mettre pour faire du café, moi je te ramène un distributeur automatique de café, t'as plus rien à faire :o
 
-- Mise à part convertir du C++ en C en espérant que ça marche :D

Message cité 1 fois
Message édité par MagicBuzz le 04-06-2007 à 17:18:00
n°1569940
_darkalt3_
Proctopathe
Posté le 04-06-2007 à 17:23:20  profilanswer
 

MagicBuzz a écrit :

Mais en tout cas, si y'a bien une diff entre "CreateThread" et "CreateProcess" c'est pour une raison :spamafote:


 
Le partage des données, entre autres.


---------------
Töp of the plöp
n°1569944
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:32:02  profilanswer
 

j'ai beaucoup d'autres points qui vont me prendre du temps dans mon dev. j'ai pas vraiment le temps d'apprendre a gérer les threads.  :sweat:  
je demande juste à l'OS de me donner le PID qu'il vient d'attribuer, çà me paraissait pas complexe...  :cry:
 
par ailleurs la conversion c++ => c n'est pas tres drôle, l'inverse est souvent plus aisé.


Message édité par dridri le 04-06-2007 à 17:35:16

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1569948
dridri
Thérèse n'est pas moche...
Posté le 04-06-2007 à 17:40:01  profilanswer
 

ptet une solution du coté de CreateProcess :

Citation :

If CreateProcess succeeds, it returns a PROCESS_INFORMATION structure containing handles and identifiers for the new process and its primary thread.

Code :
  1. typedef struct _PROCESS_INFORMATION {
  2.   HANDLE hProcess;
  3.   HANDLE hThread;
  4.   DWORD dwProcessId;
  5.   DWORD dwThreadId;
  6. } PROCESS_INFORMATION,
  7. *LPPROCESS_INFORMATION;

dwProcessId
    A value that can be used to identify a process. The value is valid from the time the process is created until all handles to the process are closed and the process object is freed; at this point, the identifier may be reused.
dwThreadId
    A value that can be used to identify a thread. The value is valid from the time the thread is created until all handles to the thread are closed and the thread object is freed; at this point, the identifier may be reused.


Message édité par dridri le 04-06-2007 à 17:41:20

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1570149
dridri
Thérèse n'est pas moche...
Posté le 05-06-2007 à 10:15:19  profilanswer
 

up


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1570152
_darkalt3_
Proctopathe
Posté le 05-06-2007 à 10:18:44  profilanswer
 

up quoi ?
t'en es où ?


---------------
Töp of the plöp
n°1570190
dridri
Thérèse n'est pas moche...
Posté le 05-06-2007 à 11:01:30  profilanswer
 

_darkalt3_ a écrit :

up quoi ?
t'en es où ?


up que les threads j'ai pas envie d'y passer la nuit
en VisualBasic :

Code :
  1. pid = Shell(Chr(34) + "C:\Windows\System32\notepad.exe" + Chr(34))


me renvoit son PID.
J'ai l'impression de demander la lune.
 
Comme j'ai pas le temps, j'ai trouvé une solution bien bourrine : je copie mon application sous un nouveau nom "Moteur_ID_de_demande" ce qui me crée des applications uniques que je peux killer grâce à leur nom.
J'avoue que c'est débile.   :jap:


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1570192
_darkalt3_
Proctopathe
Posté le 05-06-2007 à 11:03:32  profilanswer
 

dridri a écrit :

up que les threads j'ai pas envie d'y passer la nuit
en VisualBasic :

Code :
  1. pid = Shell(Chr(34) + "C:\Windows\System32\notepad.exe" + Chr(34))


me renvoit son PID.


Ouais, ben ici t'es en catégorie C.
 

dridri a écrit :


J'ai l'impression de demander la lune.


C'est un forum, pas une hotline.
Dégoûte pas les gens de passer du temps à tes problèmes.


---------------
Töp of the plöp
n°1570195
dridri
Thérèse n'est pas moche...
Posté le 05-06-2007 à 11:06:30  profilanswer
 

_darkalt3_ a écrit :

Ouais, ben ici t'es en catégorie C.
 
 
C'est un forum, pas une hotline.
Dégoûte pas les gens de passer du temps à tes problèmes.


de demander la lune au C (en comparaison au VB). me fais pas dire ce que j'ai pas dit :o


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
n°1570198
_darkalt3_
Proctopathe
Posté le 05-06-2007 à 11:07:36  profilanswer
 

dridri a écrit :

de demander la lune au C (en comparaison au VB). me fais pas dire ce que j'ai pas dit :o


Exprime toi mieux alors :o


---------------
Töp of the plöp
n°1573578
dridri
Thérèse n'est pas moche...
Posté le 12-06-2007 à 09:43:48  profilanswer
 

Bon voilà la solution :
 
createprocess stocke les infos de processus dans pi (PROCESS_INFORMATION), dont la structure est :

Code :
  1. typedef struct _PROCESS_INFORMATION { // pi  
  2.     HANDLE hProcess;
  3.     HANDLE hThread;
  4.     DWORD dwProcessId;
  5.     DWORD dwThreadId;
  6. } PROCESS_INFORMATION;


il suffit donc de récupérer le dword dwProcessId qui correspond au PID (qu'on peut obtenir avec la commande tasklist).
 

Code :
  1. //Ouverture du process
  2.    if (!CreateProcess("C:\\Windows\\System32\\notepad.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
  3.    {
  4.    printf("CreateProcess a echoue" );
  5.    return 0;
  6.    }else{
  7.    printf("CreateProcess notepad.exe avec PID : %d\n",pi.dwProcessId);
  8.    }


 
résolu !


---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C][Windows] Récupérer le PID d'un programme

 

Sujets relatifs
Apache/mySQL sur Windows CERécupérer un fichier et le retransmettre par la suite.
Recuperer plage de valeur pour userform[VBA-E]souci avec un programme
transfert de fichier de linux vers windows & vise vers caExecuter une commande et recuperer la sortie standard
mozilla , recupérer le cacheAppeller un programme en html/javascript
programme utilisant API Windows et GNU Scientific Librairy 
Plus de sujets relatifs à : [C][Windows] Récupérer le PID d'un programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR