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

  FORUM HardWare.fr
  Programmation
  C++

  PID

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PID

n°1441846
d'jo
Posté le 13-09-2006 à 15:27:14  profilanswer
 


Bonjour  
 
J'ai fais un prog qui lance une ligne de commande grace à system(..) et je souhaite récuperer le PID associé
pour pouvoir ensuite "killer" ce processus.. Je n'ai pas trouvé de solution efficace sur le net alors si quelqu'un sait...
 
Merci

mood
Publicité
Posté le 13-09-2006 à 15:27:14  profilanswer
 

n°1441882
_darkalt3_
Proctopathe
Posté le 13-09-2006 à 16:01:45  profilanswer
 

le PID associé à quoi ?
 


---------------
Töp of the plöp
n°1441892
d'jo
Posté le 13-09-2006 à 16:12:44  profilanswer
 

au nouveau programme lancé par la ligne de commande dans system

n°1441896
_darkalt3_
Proctopathe
Posté le 13-09-2006 à 16:15:20  profilanswer
 

sous quel os ?


---------------
Töp of the plöp
n°1441937
d'jo
Posté le 13-09-2006 à 16:54:13  profilanswer
 

ubuntu

n°1441938
_darkalt3_
Proctopathe
Posté le 13-09-2006 à 16:54:54  profilanswer
 

Je pense que ce sera plus facile avec un script qu'en c++, à moins que tu n'aies pas le choix.


---------------
Töp of the plöp
n°1441940
straffo
Posté le 13-09-2006 à 16:56:27  profilanswer
 

fork puis exec ...
(fork retourne un pid_t)
 
C'est plus simple

n°1441944
d'jo
Posté le 13-09-2006 à 16:58:55  profilanswer
 

oui je veux utiliser un script c++ mais par exemple getpid me donne le pid du prossess père donc je suis coincé..

n°1441983
zapan666
Tout est relatif
Posté le 13-09-2006 à 17:24:52  profilanswer
 

d'jo a écrit :

oui je veux utiliser un script c++ mais par exemple getpid me donne le pid du prossess père donc je suis coincé..


 [:ciler]  
 
 
et dans le process fils, il donne pas le bon pid ? j'ai dis une connerie.


Message édité par zapan666 le 13-09-2006 à 17:25:56

---------------
my flick r - Just Tab it !
n°1442100
franceso
Posté le 13-09-2006 à 22:36:01  profilanswer
 

d'jo a écrit :

oui je veux utiliser un script c++ mais par exemple getpid me donne le pid du prossess père donc je suis coincé..

Fork te renvoit
- le pid du fils forké si tu es le père
- 0 si tu es le fils
 

Code :
  1. switch (pid=fork())
  2. {
  3.   case -1: /* erreur */
  4.     perror (...);
  5.     /* traitement de l'erreur */
  6.   case 0: /* fils */
  7.     exec( ); /* on recouvre le process par la commande qu'on veut */
  8.     /* si on arrive ici, c'est qu'il y a eu une erreur */
  9. }
  10. /* Ici on est dans le père, et la variable pid contient le pid du fils */


---------------
TriScale innov
mood
Publicité
Posté le 13-09-2006 à 22:36:01  profilanswer
 

n°1442106
zapan666
Tout est relatif
Posté le 13-09-2006 à 22:56:16  profilanswer
 

franceso a écrit :

Fork te renvoit
- le pid du fils forké si tu es le père
- 0 si tu es le fils
 

Code :
  1. switch (pid=fork())
  2. {
  3.   case -1: /* erreur */
  4.     perror (...);
  5.     /* traitement de l'erreur */
  6.   case 0: /* fils */
  7.     exec( ); /* on recouvre le process par la commande qu'on veut */
  8.     /* si on arrive ici, c'est qu'il y a eu une erreur */
  9. }
  10. /* Ici on est dans le père, et la variable pid contient le pid du fils */



 
ouais mais il veut killer le programme qu'il lance via le exec je crois, en fait


---------------
my flick r - Just Tab it !
n°1442179
franceso
Posté le 14-09-2006 à 09:06:26  profilanswer
 

zapan666 a écrit :

ouais mais il veut killer le programme qu'il lance via le exec je crois, en fait


Ben justement le père connait le pid de son fils puisque c'est la valeur de retour de fork().


---------------
TriScale innov
n°1442641
zapan666
Tout est relatif
Posté le 14-09-2006 à 18:16:51  profilanswer
 

franceso a écrit :

Ben justement le père connait le pid de son fils puisque c'est la valeur de retour de fork().


 
et si tu termine le fork, tu termine automatiquement le exec ? bah si c'est ça, ouep, c'est ça que je ferais  [:dawa]


---------------
my flick r - Just Tab it !
n°1442860
franceso
Posté le 15-09-2006 à 10:22:32  profilanswer
 

zapan666 a écrit :

et si tu termine le fork, tu termine automatiquement le exec ? bah si c'est ça, ouep, c'est ça que je ferais  [:dawa]

Ouais: fork crée un nouveau process qui est exactement dans le même état que le père. exec ne fait que recouvrir le processus fils avec un nouvel exécutable (mais sans changer son pid, ses file descriptors, etc.)


---------------
TriScale innov
n°1443232
Sve@r
Posté le 15-09-2006 à 19:13:08  profilanswer
 

d'jo a écrit :

Bonjour  
 
J'ai fais un prog qui lance une ligne de commande grace à system(..) et je souhaite récuperer le PID associé
pour pouvoir ensuite "killer" ce processus.. Je n'ai pas trouvé de solution efficace sur le net alors si quelqu'un sait...
 
Merci


C'est dommage de killer systématiquement un processus lancé. Il ne s'arrête pas tout seul ???
 

franceso a écrit :

Code :
  1. switch (pid=fork())
  2. {
  3.   case -1: /* erreur */
  4.     perror (...);
  5.     /* traitement de l'erreur */
  6.   case 0: /* fils */
  7.     exec( ); /* on recouvre le process par la commande qu'on veut */
  8.     /* si on arrive ici, c'est qu'il y a eu une erreur */
  9. }
  10. /* Ici on est dans le père, et la variable pid contient le pid du fils */



 
Cette solution est parfaite. Il faut juste signaler que "exec" est un nom générique car la fonction "exec" n'existe pas en tant que telle. Ce terme recouvre en fait la famille des fonctions "exec" qui sont "execv", "execl", "execve", "execle", "execvp" et "execlp". A toi de choisir celle qui te convient le mieux.
De plus, ne pas oublier de rajouter en ligne 11 (donc dans le père) l'instruction "kill(pid, SIGTERM)"

Message cité 1 fois
Message édité par Sve@r le 15-09-2006 à 19:17:19

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1444502
d'jo
Posté le 19-09-2006 à 10:27:56  profilanswer
 

Sve@r a écrit :

C'est dommage de killer systématiquement un processus lancé. Il ne s'arrête pas tout seul ???
 
 
 
Cette solution est parfaite. Il faut juste signaler que "exec" est un nom générique car la fonction "exec" n'existe pas en tant que telle. Ce terme recouvre en fait la famille des fonctions "exec" qui sont "execv", "execl", "execve", "execle", "execvp" et "execlp". A toi de choisir celle qui te convient le mieux.
De plus, ne pas oublier de rajouter en ligne 11 (donc dans le père) l'instruction "kill(pid, SIGTERM)"


 
En fait je ne veux pas killer le processus automatiquement mais j'ai besoin de mémoriser le pid du processus engendré par :

Code :
  1. sytem(programme);


Comme ca ,si je souhaite killer le progamme lancé de mon programme principal plus tard il me suffit de récuperer son pid .
fork dédouble l'application  mais ne me donne pas le pid du programme executé dans system donc cette solution n'est pas bonne pour mon cas

Message cité 1 fois
Message édité par d'jo le 19-09-2006 à 10:29:17
n°1444533
straffo
Posté le 19-09-2006 à 11:10:02  profilanswer
 

d'jo a écrit :


Comme ca ,si je souhaite killer le progamme lancé de mon programme principal plus tard il me suffit de récuperer son pid .
fork dédouble l'application  mais ne me donne pas le pid du programme executé dans system donc cette solution n'est pas bonne pour mon cas


 
 
Si justement :)
 
fork te crée un 2ème process et te renvoie un PID X
si suite a ce fork tu fait un exec de l'autre programme il ecrasera le 2eme process et aura comme pid X (celui que fork retourne)
 
Au final tu aura un programme principal d'ou tu pourra killer le 2eme process (celui de PID X)

n°1444538
d'jo
Posté le 19-09-2006 à 11:15:44  profilanswer
 

ah...
Quand tu dis exec() cela équivaut à system() ? Je ne connait pas exec().
 (je suis sous ubuntu au cas ou)

Message cité 1 fois
Message édité par d'jo le 19-09-2006 à 11:16:30
n°1444557
d'jo
Posté le 19-09-2006 à 11:48:41  profilanswer
 

En fait mon prog fais un truc du style :

Code :
  1. string prog;
  2. ... //en fonction des choix que je veux
  3. system (prog.c_str());


 
et je viens de regarder les fonctions de exec ne me permettent pas de faire ca...

n°1444570
straffo
Posté le 19-09-2006 à 12:19:45  profilanswer
 

d'jo a écrit :

ah...
Quand tu dis exec() cela équivaut à system() ? Je ne connait pas exec().
 (je suis sous ubuntu au cas ou)


 
non :)
 
System crée un nouveau process et reviens apres la fin de l'execution du programme externe.
 
exec remplace ton process par celui lancé (d'ou l'importance de faire un fork avant !) ce qui te permet de le controler (et donc de le tuer si  
il te gène)
 
Lit ça : http://www.linux-kheops.com/doc/ma [...] tem.3.html
et ça http://www.linux-kheops.com/doc/ma [...] xec.3.html
 
Ca devrais t'éclairer.


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

  PID

 

Sujets relatifs
PID d'un Processus sous WindowsObtenir un PID
récupérer le PID d'un processusPID emetteur d'un signal
[bash] killer un pid (Débutant)[C-UNIX] Recuperer le command name a partir du PID
[VC++] passer d'un PID a un HWND ?? 
Plus de sujets relatifs à : PID


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)