J'essaie actuellement d'imprimer un message à partir d'un processus fils après avoir appelé execlp() dans l'enfant. Cependant, rien n'apparaît sur le terminal après l'appel à execlp(). Qu'est-ce qui fait que mes appels printf() n'affichent rien, et comment cela peut-il être résolu?Comment imprimer printf() après un appel à execlp() dans un processus fils?
Répondre
Après un appel execlp() réussi, aucun code dans votre programme précédent ne sera plus jamais exécuté. L'espace mémoire du processus est remplacé par le nouveau processus.
Si vous avez encore besoin d'effectuer une gestion avec l'enfant, appelez le fork() avant d'appeler le execlp(). Cela vous donnera deux processus, et vous pouvez alors faire une certaine communication entre les deux.
"La famille des fonctions exec() remplace l'image du processus en cours avec une nouvelle image de processus"
(De: http://linux.die.net/man/3/execlp)
Cela explique assez clairement.
Les fonctions exec*()
remplacent le processus qui les appelait avec l'exécutable fourni en tant qu'argument.
Cela signifie que si l'appel execlp
aboutit, l'enfant qui a effectué l'appel n'existe plus. Ainsi, toute instruction printf
suivant le execlp
ne peut être exécutée que si l'appel execlp
échoue, ce qui signifie généralement que le programme demandé n'existe pas.
Merci. Tant votre explication de la fonction exec() fonctions d'écraser l'espace mémoire actuel et la recommandation de contourner ce problème sont corrects. – XBigTK13X