2010-10-05 24 views

Répondre

4

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.

+0

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

1

"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.

2

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.