exec(3) Library Functions Manual exec(3) NOM execl, execlp, execle, execv, execvp, execvpe - Executer un fichier BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include extern char **environ; int execl(const char *chemin, const char *arg, ... /*, (char *) NULL */); int execlp(const char *fichier, const char *arg, ... /*, (char *) NULL */); int execle(const char *chemin, const char *arg, ... /*, (char *) NULL, char *const envp[] */); int execv(const char *chemin, char *const argv[]); int execvp(const char *fichier, char *const argv[]); int execvpe(const char *fichier, char *const argv[], char *const envp[]); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : execvpe(): _GNU_SOURCE DESCRIPTION La famille des fonctions exec() remplace l'image du processus en cours par l'image d'un nouveau processus. Les fonctions decrites dans cette page de manuel sont en realite des frontaux pour execve(2) (consultez la page de manuel de execve(2) pour plus de details sur le remplacement de l'image du processus en cours). Le premier argument de toutes ces fonctions est le nom du fichier a executer. Les fonctions peuvent etre regroupees en se basant sur les lettres qui suivent le prefixe "exec". l - execl(), execlp(), execle() Les arguments const char *arg et les points de suspension qui suivent peuvent etre vus comme arg0, arg1, ..., argn. Ensemble, ils decrivent une liste d'un ou plusieurs pointeurs sur des chaines de caracteres terminees par des caracteres de code 0 qui representent la liste des arguments disponibles pour le programme a executer. Par convention, le premier argument doit pointer sur le nom du fichier associe au programme a executer. La liste des arguments doit se terminer par un pointeur NULL, et puisque ce sont des fonctions variadiques, ce pointeur doit etre transtype avec (char *) NULL. A la difference des fonctions 'l', les fonctions 'v' (voir ci-dessous) specifient les arguments de ligne de commande du programme a executer sous la forme d'un tableau de pointeurs. v - execv(), execvp(), execvpe() L'argument char *const argv[] est un tableau de pointeurs sur des chaines de caracteres terminees par un caractere de code 0 et represente la liste des arguments disponibles pour le nouveau programme . Par convention, le premier argument doit pointer sur le nom du fichier associe au programme a executer. Le tableau de pointeurs doit se terminer par un pointeur NULL. e - execle(), execvpe() L'environnement de l'image du nouveau processus est specifie a l'aide de l'argument envp. Ce dernier est un tableau de pointeurs sur des chaines de caracteres terminees par des caracteres de code 0 et doit se terminer par un pointeur NULL. Toutes les autres fonctions exec() (qui ne possedent pas le suffixe 'e') extraient l'environnement pour l'image du nouveau processus depuis la variable externe environ dans le processus appelant. p - execlp(), execvp(), execvpe() Ces fonctions dupliqueront les actions de l'interpreteur de commandes dans la recherche du fichier executable si le nom fourni ne contient pas de barre oblique << / >>. Le fichier est recherche dans la liste de repertoires separes par des deux-points indiquee dans la variable d'environnement PATH. Si cette variable n'est pas definie, la liste de chemins par defaut correspondra a une liste contenant les repertoires renvoyes par confstr(_CS_PATH) (qui renvoie en general la valeur "/bin:/usr/bin"), et eventuellement le repertoire courant ; voir NOTES pour plus de details. execvpe() recherche le programme en utilisant la valeur de PATH de l'environnement de l'appelant, et non celle issue de l'argument envp. Si le nom du fichier specifie inclut une barre oblique, alors PATH est ignore et le fichier dont le chemin est fourni est execute. De plus, certaines erreurs sont traitees de maniere specifique. Si l'acces au fichier est refuse (execve(2) renvoie alors une erreur EACCES), ces fonctions continueront a parcourir le reste du chemin de recherche. Si aucun fichier n'est trouve, elles se termineront en renvoyant errno defini a EACCES. Si l'en-tete d'un fichier n'est pas reconnu (execve(2) renvoie alors une erreur ENOEXEC), ces fonctions executeront l'interpreteur de commandes (/bin/sh) avec le chemin d'acces au fichier en tant que premier argument. Si cette tentative echoue, aucune recherche supplementaire ne sera effectuee. Toutes les autres fonctions exec() (qui ne comportent pas le suffixe 'p') ont pour premier argument un chemin (relatif ou absolu) qui specifie le programme a executer. VALEUR RENVOYEE Les fonctions exec() ne s'interrompent que si une erreur s'est produite. La valeur renvoyee est -1, et errno contient le code d'erreur. ERREURS Toutes ces fonctions peuvent echouer et definir errno a n'importe quelle erreur decrite dans execve(2). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +-----------------------------+--------------------------+-------------+ |Interface | Attribut | Valeur | +-----------------------------+--------------------------+-------------+ |execl(), execle(), execv() | Securite des threads | MT-Safe | +-----------------------------+--------------------------+-------------+ |execlp(), execvp(), | Securite des threads | MT-Safe env | |execvpe() | | | +-----------------------------+--------------------------+-------------+ VERSIONS Le chemin de recherche par defaut (utilise lorsque l'environnement ne contient pas la variable PATH) varie en fonction du systeme utilise. Il contient en general /bin et /usr/bin (dans cet ordre) et parfois aussi le repertoire courant. Sur certains systemes et a titre de mesure anti-cheval de Troie, le repertoire courant est inclus apres /bin et /usr/bin. L'implementation de la glibc quant a elle, a longtemps conserve le chemin de recherche par defaut traditionnel ou le repertoire courant se situe en tete de liste. Cependant, suite a une reecriture du code lors du developpement de la version 2.24 de la glibc, le repertoire courant a ete proprement ejecte du chemin de recherche. Ce changement de comportement accidentel etant considere cependant comme relativement benefique, il n'y aura pas de retour en arriere. Le comportement de execlp() et execvp() lorsqu'une erreur se produit pendant l'execution d'un programme est un comportement historique mais n'a traditionnellement jamais ete documente, ni specifie dans la norme POSIX. Lorsque ETXTBSY est rencontre, BSD (et peut-etre d'autres systemes) endorment le processus appelant puis reitere l'operation. Sous Linux, cette situation est consideree comme une erreur grave, et la commande se termine immediatement. Traditionnellement, les fonctions execlp() et execvp() ignoraient toutes les erreurs sauf celles decrites ci-dessus, ENOMEM et E2BIG a la survenue desquelles elles se terminaient. Desormais, elles se terminent si une autre erreur que celles-ci se produit. STANDARDS environ execl() execlp() execle() execv() execvp() POSIX.1-2008. execvpe() GNU. HISTORIQUE environ execl() execlp() execle() execv() execvp() POSIX.1-2001. execvpe() glibc 2.11. BOGUES Dans les versions de la glibc anterieures a 2.24, execl() et execle() utilisaient realloc(3) en interne et n'etaient donc pas async-signal-safe, en violation des specifications de POSIX.1. La version 2.24 de la glibc corrige ce probleme. Details specifiques a l'architecture Sous sparc et sparc64, execv() est fournie en tant qu'appel systeme par le noyau (avec le prototype decrit ci-dessus) a titre de compatibilite avec SunOS. Sous ces architectures, la fonction qui sert de frontal a execv() n'utilise pas cette fonction. VOIR AUSSI sh(1), execve(2), execveat(2), fork(2), ptrace(2), fexecve(3), system(3), environ(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 exec(3)