PID - C++ - Programmation
Marsh Posté le 13-09-2006 à 16:12:44
au nouveau programme lancé par la ligne de commande dans system
Marsh Posté le 13-09-2006 à 16:54:54
Je pense que ce sera plus facile avec un script qu'en c++, à moins que tu n'aies pas le choix.
Marsh Posté le 13-09-2006 à 16:56:27
fork puis exec ...
(fork retourne un pid_t)
C'est plus simple
Marsh Posté le 13-09-2006 à 16:58:55
oui je veux utiliser un script c++ mais par exemple getpid me donne le pid du prossess père donc je suis coincé..
Marsh Posté le 13-09-2006 à 17:24:52
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é.. |
et dans le process fils, il donne pas le bon pid ? j'ai dis une connerie.
Marsh Posté le 13-09-2006 à 22:36:01
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 :
|
Marsh Posté le 13-09-2006 à 22:56:16
franceso a écrit : Fork te renvoit
|
ouais mais il veut killer le programme qu'il lance via le exec je crois, en fait
Marsh Posté le 14-09-2006 à 09:06:26
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().
Marsh Posté le 14-09-2006 à 18:16:51
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
Marsh Posté le 15-09-2006 à 10:22:32
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 |
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.)
Marsh Posté le 15-09-2006 à 19:13:08
d'jo a écrit : Bonjour |
C'est dommage de killer systématiquement un processus lancé. Il ne s'arrête pas tout seul ???
franceso a écrit :
|
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)"
Marsh Posté le 19-09-2006 à 10:27:56
Sve@r a écrit : C'est dommage de killer systématiquement un processus lancé. Il ne s'arrête pas tout seul ??? |
En fait je ne veux pas killer le processus automatiquement mais j'ai besoin de mémoriser le pid du processus engendré par :
Code :
|
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
Marsh Posté le 19-09-2006 à 11:10:02
d'jo a écrit : |
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)
Marsh Posté le 19-09-2006 à 11:15:44
ah...
Quand tu dis exec() cela équivaut à system() ? Je ne connait pas exec().
(je suis sous ubuntu au cas ou)
Marsh Posté le 19-09-2006 à 11:48:41
En fait mon prog fais un truc du style :
Code :
|
et je viens de regarder les fonctions de exec ne me permettent pas de faire ca...
Marsh Posté le 19-09-2006 à 12:19:45
d'jo a écrit : ah... |
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.
Marsh Posté le 13-09-2006 à 15:27:14
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