Provided by: manpages-de-dev_4.15.0-9_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 *pathname, const char *arg, 
       /*, (char *) NULL */);
       int execlp(const char *file, const char *arg, 
       /*, (char *) NULL */);
       int execle(const char *pathname, const char *arg, 
                       /*, (char *) NULL, char *const envp[] */);
       int execv(const char *pathname, 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  über
       diejenigen der Systemfunktion execve(2) gelegt. (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.

       Die Funktionen können, basierend auf den Buchstaben, die dem Namensanfang  »exec«  folgen,
       gruppiert werden.

   l - execl(), execlp(), execle()
       Der  Ausdruck  const char *arg und die nachfolgenden Auslassungspunkte (»…«) 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.

       Im   Gegensatz   zu   den   »l«-Funktionen   legen   die   »v«-Funktionen   (unten)    die
       Befehlszeilenargumente des ausgeführten Programmes als Vektor fest.

   v - execv(), execvp(), execvpe()
       Die  Argument char *const argv[] ist ein im Folgeprogramm verfügbares Feld von Zeigern auf
       nullterminierte Zeichenketten, die die  Argumentenliste  darstellen.  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.

   e - execle(), execvpe()
       Die Umgebung für das neue Prozessabbild wird mittels des Arguments  envp  festgelegt.  Das
       Argument  envp  ist  ein  Feld  von Zeigern auf nullterminierte Zeichenketten und muss mit
       einem Null-Zeiger als letztem Eintrag abgeschlossen werden.

       Alle anderen exec()-Funktionen (die kein »e«  in  der  Endung  enthalten)  übernehmen  die
       Umgebungsvariablen für den neuen Prozess von der externen Variablen environ im aufrufenden
       Prozess.

   p - execlp(), execvp(), execvpe()
       Diese Funktionen 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.

       execvpe() sucht nach dem Programm  mittels  des  Werts  von  PATH  aus  der  Umgebung  des
       Aufrufenden, nicht aus dem Argument envp.

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

       Alle anderen exec()-Funktionen (die kein »p« in der Endung enthalten) akzeptieren als  ihr
       erstes Argument einen (relativen oder absoluten) Pfadnamen, der das auszuführende Programm
       identifiziert.

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.

   Architekturspezifische Details
       Unter Sparc und Sparc64 wird execv() zur Kompatibilität mit SunOS durch den Kernel als ein
       Systemaufruf (mit dem oben gezeigten Prototypen) bereitgestellt. Diese Funktion wird durch
       den execv()-Wrapper auf diesen Architekturen nicht eingesetzt.

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  5.13  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   Martin   Schulze
       <joey@infodrom.org>,   Roland   Krause   <Rokrause@aol.com>,   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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.