6 réponses
Plus précisément si tu veux le lancer en parallèle, fork() pour créer un processus fils suivi de exec() pour lancer ton programme externe.
je l'avais deja dit sur ce poste :
http://www.commentcamarche.net/forum/affich 6959352 c lancer un programme silencieusement#dernier
http://www.commentcamarche.net/forum/affich 6959352 c lancer un programme silencieusement#dernier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
un fork est une fonction qui premet de creer un processus fils a celui qui est en cour et tu l'utilise comme ceci
pid = fork();
/* En cas de reussite du fork, le pere et le fils poursuivent leur
execution a partir d'ici. La valeur de pid permet de distinguer
le pere du fils.
*/
switch(pid) {
case -1: /* erreur dans fork() */
fprintf(stderr,"error %d in fork: %s\n",errno,sys_errlist[errno]);
exit(errno);
case 0: /* on est dans le fils */
break;
default: /* on est dans le pere */
}
}
pid = fork();
/* En cas de reussite du fork, le pere et le fils poursuivent leur
execution a partir d'ici. La valeur de pid permet de distinguer
le pere du fils.
*/
switch(pid) {
case -1: /* erreur dans fork() */
fprintf(stderr,"error %d in fork: %s\n",errno,sys_errlist[errno]);
exit(errno);
case 0: /* on est dans le fils */
break;
default: /* on est dans le pere */
}
}
L'intérêt d'utiliser un fork() avant de lancer la fonction exec() c'est que cette dernière va effacer ENTIEREMENT l'ensemble du code qui la suit... Ainsi tu peux faire :
pid = fork() if(pid == 0){ // On est dans le processus fils exec(/*les différents arguments, jette un coup d'oeil dans le man ;) */); // Le code qui suit ne sera jamais executé sauf si il y a une erreur au moment du lancement de la fonction exec // L'empechant de s'exécuter fprintf(stderr, "Erreur lors de le lancement de la fonction exec()"); perror("exec"); } else { // Ici, on est dans le processus père }