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 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.
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.07 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 [AT] infodrom.org>, Roland Krause <Rokrause [AT] aol.com>, Martin Eberhard Schauer <Martin.E.Schauer [AT] gmx.de> und Helge Kreutzmann <debian [AT] 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 [AT] lists.org>.