Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       execl, execlp, execle, execv, execvp, execvpe - führt eine Datei aus

ÜBERSICHT

       #include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char *arg, ...
       /* (char  *) NULL */);
       int execlp(const char *file, const char *arg, ...
       /* (char  *) NULL */);
       int execle(const char *path, const char *arg, ...
                       /*, (char *) NULL, char * const envp[] */);
       int execv(const char *path, char *const argv[]);
       int execvp(const char *file, char *const argv[]);
       int execvpe(const char *file, char *const argv[],
                       char *const envp[]);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       execvpe(): _GNU_SOURCE

BESCHREIBUNG

       Die exec()-Funktionsfamilie ersetzt den aktuellen Programmcode im Speicher mit einem neuen
       Prozessabbild.  Die  in  dieser  Handbuchseite  beschriebenen  Bibliotheksfunktionen  sind
       Frontends  zu  der  Systemfunktion  execve(2).  (Siehe die Handbuchseite von execve(2) für
       weitere Details über das Ersetzen des aktuellen Prozessabbilds.)

       Das erste Argument dieser Funktionen ist der Name der Datei, die ausgeführt werden soll.

       Der Ausdruck const char *arg und die nachfolgenden Auslassungspunkte (»…«) der  Funktionen
       execl(),  execlp()  und  execle()  sind  als  eine Liste mit einer unbestimmten Anzahl von
       Parametern arg0, arg1, …, argn zu verstehen. Zusammen stellen sie  eine  Liste  mit  einem
       oder  mehreren  Zeigern  auf nullterminierte (mit '\0' abgeschlossenen) Zeichenketten dar,
       die dem aufgerufenen Programm als Argumentliste verfügbar ist. Der  erste  Eintrag  sollte
       konventionsgemäß  ein  Zeiger  auf  den  Dateinamen  des  aufgerufenen Programms sein. Die
       Parameterliste muss mit einem Null-Zeiger abgeschlossen werden  und  weil  es  variadische
       Funktionen  sind,  muss  für  diesen  Zeiger  eine  Typumwandlung  (cast) zu (char *) NULL
       durchgeführt werden.

       Die Funktionen  execv(), execvp() und  execvpe()  übergeben  die  Aufrufparameter  an  das
       Folgeprogramm  in  einem  Feld  von  Zeigern  auf nullterminierte Zeichenketten. Das erste
       Argument sollte konventionsgemäß auf den Namen der auszuführenden Datei weisen.  Der  Feld
       von Zeigern muss mit einem Null-Zeiger als letztem Eintrag abgeschlossen werden.

       Die  Funktionen  execle() und execvpe() ermöglichen dem aufrufenden Programm, die Umgebung
       für das auszuführende Programm mittels des Arguments envp zu übergeben. Das Argument  envp
       ist  ein Feld von Zeigern auf nullterminierte Zeichenketten und muss mit einem Null-Zeiger
       als  letztem  Eintrag  abgeschlossen  werden.  Die  übrigen  Funktionen   übernehmen   die
       Umgebungsvariablen für den neuen Prozess von der externen Variablen environ im aufrufenden
       Prozess.

   Spezielle Semantik für execlp() und execvp()
       Die Funktionen execlp(), execvp() und execvpe() suchen ebenso wie  die  Shell  nach  einem
       ausführbaren  Programm, wenn der angegebene Dateiname keinen Schrägstrich (/) enthält. Die
       Datei wird in der durch Doppelpunkte getrennten Liste  von  Verzeichnis-Pfadnamen  in  der
       Umgebungsvariablen  PATH  gesucht.  Wenn  diese  Variable  nicht  definiert  ist,  ist die
       Pfadliste standardmäßig eine Liste, die die von confstr(_CS_PATH) (das typischerweise  den
       Wert   »/bin:/usr/bin«   zurückliefert)   zurückgelieferten   Verzeichnisse   enthält  und
       mglicherweise auch das aktuelle Arbeitsverzeichnis.  Lesen  Sie  ANMERKUNGEN  für  weitere
       Details.

       Falls  der  angegebene  Dateiname  einen Schrägstrich enthält, wird PATH ignoriert und die
       Datei mit dem angegebenen Pfadnamen ausgeführt.

       Zusätzlich werden bestimmte Fehler speziell behandelt.

       Falls die Ausführung einer gefundenen Datei verweigert wird (die versuchte Ausführung  von
       execve(2)  führte  zum  Fehler  EACCES),  werden  diese  Funktionen im restlichen Suchpfad
       weitersuchen. Wenn aber keine andere Datei gefunden wird, kehren diese  Funktionen  zurück
       und setzen errno auf EACCES.

       Wenn  der  Header  einer  Datei nicht erkannt wird (die versuchte Ausführung von execve(2)
       führte zum Fehler ENOEXEC), starten diese Funktionen die Shell (/bin/sh) mit dem Pfadnamen
       der  Datei  als  erstes  Argument.  (Wenn  dieser  Versuch  fehlschlägt,  wird  die  Suche
       abgebrochen.)

RÜCKGABEWERT

       Die exec()-Funktionen kehren nur in  das  aufrufende  Programm  zurück,  wenn  ein  Fehler
       aufgetreten   ist.   Der  Rückgabewert  ist  -1  und  errno  wird  auf  die  entsprechende
       Fehlerkennung gesetzt.

FEHLER

       Alle diese Funktionen können fehlschlagen und errno auf jeden möglichen Fehler setzen, der
       für execve(2) angegeben ist.

VERSIONEN

       Die Funktion execvpe() kam erstmals in Glibc 2.11 vor.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌──────────────────────────────┬───────────────────────┬─────────────┐
       │SchnittstelleAttributWert        │
       ├──────────────────────────────┼───────────────────────┼─────────────┤
       │execl(), execle(), execv()    │ Multithread-Fähigkeit │ MT-Safe     │
       ├──────────────────────────────┼───────────────────────┼─────────────┤
       │execlp(), execvp(), execvpe() │ Multithread-Fähigkeit │ MT-Safe env │
       └──────────────────────────────┴───────────────────────┴─────────────┘

KONFORM ZU

       POSIX.1-2001, POSIX.1-2008.

       Die Funktion execvpe() ist eine GNU-Erweiterung.

ANMERKUNGEN

       Der  Standardsuchpfad  (wird verwandt, wenn die Umgebung nicht die Variable PATH enthält),
       zeigt zwischen Systemen einige Variationen. Im Allgemeinen enthält es  /bin  und  /usr/bin
       (in  dieser  Reihenfolge)  und  kann  auch  das aktuelle Arbeitsverzeichnis enthalten. Auf
       einigen Systemen ist das aktuelle Arbeitsverzeichnis nach /bin und /usr/bin enthalten,  um
       Trojanische Pferde zu vermeiden. Die Glibc-Implementierung folgte lange der traditionellen
       Vorgabe, bei der das aktuelle Arbeitsverzeichnis am Anfang des Suchpfades  enthalten  ist.
       Aufgrund  einiger  Code-Überarbeitungen  während  der Entwicklung der Glibc 2.24 wurde das
       aktuelle  Arbeitsverzeichnis  aus   dem   Standard-Suchpfad   komplett   entfernt.   Diese
       versehentliche  Verhaltensänderung  wird  leicht  nützlich  eingeschätzt  und  wird  nicht
       zurückgenommen.

       Das Fehlerverhalten von execlp() und  execvp()  beim  Versuch  Programme  zu  starten  ist
       historische  Praxis und traditionell undokumentiert. Daher ist dieses Verhalten auch nicht
       durch den POSIX-Standard spezifiziert. BSD (und möglicherweise  andere  Systeme)  schlafen
       automatisch und wiederholen den Versuch, wenn ETXTBSY angetroffen wird. Linux behandelt es
       wie einen harten Fehler und kehrt sofort zurück.

       Traditionell ignorierten die Funktionen execlp() und execvp() alle Fehler bis auf die oben
       beschriebenen   sowie  ENOMEM  und  E2BIG,  bei  deren  Auftreten  sie  ins  Hauptprogramm
       zurückkehrten. Sie kehren jetzt ins Hauptprogramm zurück, wenn ein anderer Fehler als  die
       oben beschriebenen auftritt.

FEHLER

       Vor  Glibc  2.24  verwandten  execl() und execle() intern realloc(3) und waren daher nicht
       asynchron-signal-sicher. Dies verletzte die Anforderungen von POSIX.1. Dies wurde in Glibc
       2.24 korrigiert.

SIEHE AUCH

       sh(1), execve(2), execveat(2), fork(2), ptrace(2), fexecve(3), system(3), environ(7)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche Übersetzung dieser Handbuchseite wurde von Roland Krause <Rokrause@aol.com>,
       Martin Schulze <joey@infodrom.org>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>  und
       Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die GNU General Public License
       Version  3  oder  neuer  bezüglich  der  Copyright-Bedingungen.  Es  wird  KEINE   HAFTUNG
       übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-
       Mail an <debian-l10n-german@lists.debian.org>.