execlp

EXEC(3)                     Linux-Programmierhandbuch                    EXEC(3)



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

       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 die Umgebung für das auszuführende Programm 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.

       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.

       ┌──────────────────────────────┬───────────────────────┬─────────────┐
       │Schnittstelle                 Attribut              Wert        │
       ├──────────────────────────────┼───────────────────────┼─────────────┤
       │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.03 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 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>.



GNU                              2. August 2019                          EXEC(3)