garslouche
Messages postés584Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 2015
-
15 juin 2004 à 12:42
abdessamed78
Messages postés1Date d'inscriptiondimanche 28 octobre 2007StatutMembreDernière intervention11 novembre 2007
-
11 nov. 2007 à 15:21
Salut à tous,
je voudrais executer un programme et en récupérer le pid.
J'ai pensé à exec et à toutes ses variantes mais ça ne me donne pas de pid...
J'ai pensé à fork mais ça n'execute pas un prog...
Quelqu'un a-t-il la solution ?
Merci
On ne force pas une curiosité, on l'éveille. .................................................Daniel Pennac
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 15 juin 2004 à 18:35
fork() + execve().
C est la maniere la plus courante de lancer un processus "fils" sous Linux. En fait, tu ne l as pas bien remarque sans doute, mais exec n est quasiment jamais utilise seul parce que dans le cas de exec*(), le processus courant est REMPLACE par le processus qui est execute. Ainsi en appelant fork() tu recupere sur le pere le PID du fils, et pour le fils tu appelles exec*().
int pid = fork();
if(pid == -1)
{
printf("Erreur!!");
exit(-1);
}
if(pid == 0)
printf("Bienvenue chez le pere!");
else exec(...);
Par contre il ne faut pas oublier d appeler wait() (ou wait4, voir le manuel), pour que le pere attende la terminaison du fils, afin d eviter qu il ne devienne un processus "zombie". Cependant cela est assez facile puisque le pere recoit un signal SIGCHLD lorsqu un de ses fils quitte, il ne reste donc plus qu a adapter le gestionnaire de ce signal.
abdessamed78
Messages postés1Date d'inscriptiondimanche 28 octobre 2007StatutMembreDernière intervention11 novembre 2007 11 nov. 2007 à 15:21
j'ai utilisé "execl" pour appeler un programme console depuis une application C++Builder! mais cette application est fermé aprés l"execution de Exec !
c'est quelqu'un à une idee je serais trés reconnaissant.