Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       system - einen Shell-Befehl ausführen

ÜBERSICHT

       #include <stdlib.h>

       int system(const char *befehl);

BESCHREIBUNG

       system()  führt  einen  in  befehl  angegebenen Befehl durch Aufruf von
       /bin/sh -c befehl aus und kehrt zurück nachdem der Befehl abgeschlossen
       wurde.  Während  der  Ausführung des Befehls wird SIGCHLD blockiert und
       sowohl SIGINT als auch SIGQUIT werden ignoriert.

RÜCKGABEWERT

       Im Fehlerfall wird -1 (z.B. fork(2) fehlgeschlagen) und andernfalls der
       Status  des  Befehls zurückgegeben. Dieser letztgenannte Rückgabestatus
       hat das in wait(2) spezifizierte Format.  In  dem  Fall,  dass  /bin/sh
       nicht  ausgeführt  werden  konnte, wird der Exit-Status der des Befehls
       sein, der exit(127) aufrief.

       Falls der Wert von befehl NULL ist, gibt system()  eine  Wert  ungleich
       Null zurück, wenn die Shell verfügbar ist und Null, wenn nicht.

       system() beeinflusst nicht den Wartestatus anderer Kindprozesse.

KONFORM ZU

       C89, C99, POSIX.1-2001.

ANMERKUNGEN

       Falls  das  Feature-Test-Makro  _XOPEN_SOURCE  definiert wurde (vor dem
       Einbinden irgendwelcher Header-Dateien), dann  werden  die  in  wait(2)
       beschriebenen  Makros  (WEXITSTATUS(),  etc.)  durch  das Einbinden von
       <stdlib.h> zur Verfügung gestellt.

       Wie erwähnt, ignoriert system() SIGINT  und  SIGQUIT.  Dies  kann  dazu
       führen,  dass  Programme, die es in einer Schleife aufrufen, nicht mehr
       unterbrochen werden können, sofern sie nicht aufpassen, dass sie selbst
       den Exit-Status des Kindprozesses prüfen. Z.B.

           while (etwas) {
               int ret = system("foo");

               if (WIFSIGNALED(ret) &&
                   (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
                       break;
           }

       Benutzen   Sie  system()  nicht  von  einem  Programm  mit  SUID-  oder
       SGID-Rechten, da unbekannte Werte für einige Umgebungsvariablen benutzt
       werden  könnten,  die  möglicherweise die Systemintegrität untergraben.
       Benutzen Sie stattdessen die  Funktionen  der  exec(3)-Familie,  jedoch
       nicht   execlp(3)  oder  execvp(3).  Genaugenommen  wird  system()  aus
       Programmen mit SUID-  oder  SGID-Rechten  nicht  richtig  auf  Systemen
       funktionieren,  auf  denen  /bin/sh  Bash in der Version 2 vorliegt, da
       Bash 2 beim Start Privilegien verwirft. (Debian benutzt eine veränderte
       Bash, die dies unterlässt, wenn sie als sh aufgerufen wird.

       In  Glibc-Versionen  vor  2.1.3  wurde  die  Verfügbarkeit  von /bin/sh
       genaugenommen nicht überprüft, wenn befehl NULL war. Stattdessen  wurde
       angenommen,  es  sei  verfügbar und system() gab in diesem Fall immer 1
       zurück. Seit Glibc  2.1.3  wird  diese  Überprüfung  durchgeführt,  da,
       obwohl  POSIX.1-2001  eine  entsprechende  Implementierung benötigt, um
       eine Shell zur Verfügung zu stellen, diese Shell nicht  verfügbar  oder
       ausführbar  sein  könnte, wenn das aufrufende Programm vorher chroot(2)
       aufrief (was nicht durch POSIX.1-2001 spezifiziert ist).

       Es ist möglich, dass der Shell-Befehl 127  zurückgibt.  Dies  ist  kein
       eindeutiger Indikator dafür, dass der Aufruf von execve(2) fehlschlug.

SIEHE AUCH

       sh(1), signal(2), wait(2), exec(3)

KOLOPHON

       Diese   Seite   ist   Teil   der  Veröffentlichung  3.32  des  Projekts
       Linux-man-pages. Eine Beschreibung des Projekts und Informationen,  wie
       Fehler     gemeldet     werden     können,     finden     sich    unter
       http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick  Rother
       <krd@gulu.net> und Chris Leick <c.leick@vollbio.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>.

                              10. September 2010                     SYSTEM(3)