PID [Linux]

Signaler
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015
-
Messages postés
1
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
11 novembre 2007
-
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

2 réponses

Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

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.

Voila j espere avoir ete clair et complet...
Messages postés
1
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
11 novembre 2007

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.