execve

EXECVE(2)                  Linux Programmer's Manual                 EXECVE(2)



BEZEICHNUNG
       execve - zum Ausführen von Programmen

SYNTAX
       #include <unistd.h>

       int execve (const char *dateiname, const char * argv[], const char
       *envp[]);

BESCHREIBUNG
       execve() führt das Programm aus, auf das dateiname zeigt.  dateiname
       muà entweder ein binäres ausführbares Programm oder ein Shell-Skript,
       welches mit einer Linie in der Form "#! Interpreter [arg]" beginnt,
       sein.

       execve() kehrt beim Erfolg nicht zurück und der Text, Daten, bss, und
       Stapel des aufrufenden Prozesses wird durch das geladene Programm
       überschrieben.  Das aufgerufene Programm erbt die PID des aufrufenden
       Prozesses, sowie jeden offenen Dateideskriptor, der zur Ausführung
       nicht geschlossen wurde.  Signale bezüglich des elterlichen Prozesses
       werden gelöscht.

       Falls das aktuelle Programm ptraced wird, wird nach erfolgreichem
       xecve() ein SIGTRAP gesendet.

RÃCKGABEWERT
       Bei Erfolg kehrt execve() nicht zurück, bei Fehlern wird -1
       zurückgegeben und errno wird dem entsprechend gesetzt.

FEHLER
       EACCES Die Datei ist keine gültige Datei.

       EACCES Die Erlaubnis zum ausführen der Datei wurde verweigert.

       EPERM  Das Dateisystem ist als noexec gemountet.

       EPERM  Das Dateisystem ist als nosuid gemountet und die Datei hat das
              SUID oder SGID bit gesetzt.

       E2BIG  Die Argumentenliste ist zu lang.

       ENOEXEC
              Die magische Zahl in der Datei ist falsch.

       EFAULT dateiname zeigt auf einen auÃerhalb liegenden AdreÃraum.

       ENAMETOOLONG
              dateiname ist zu lang.

       ENOENT Das File exestiert nicht.

       ENOMEM Unzulänglicher Kernelspeicher war verfügbar.

       ENOTDIR
              Eine Komponente des vorangestellten Pfades ist kein Direktory.

       EACCES die Suchrechte auf eine Komponente des vorangestellten Pfades
              wurden verweigert.

       ELOOP  dateiname enthält eine zirkulare Referenz (z.B, durch einen
              symbolischen Link)

KONFORM ZU
       SVID, AT&T, POSIX, X/OPEN, BSD 4.3

HINWEISE
       SUID und SGID Prozesse können nicht als SUID or SGID ptrace()'d
       werden.

       Eine maximale Länge von 127 Zeichen ist für die erste Zeile eines #!
       ausführbaren Shell-Skripts erlaubt.  Dies kann umgangen werden, indem
       man die maximale GröÃe des Puffers (buf) ändert, in diesem Fall ist
       man an die PuffergröÃe von 1024 Bytes gebunden, was keine triviale
       Lösung darstellt.

SIEHE AUCH
       execl(3), fork(2).




Linux 1.1.46                    21. August 1994                      EXECVE(2)