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

BEZEICHNUNG

       system - einen Shell-Befehl ausfuhren

"UBERSICHT

       #include <stdlib.h>

       int system(const char *befehl);

BESCHREIBUNG

       system()  fuhrt  einen  in  befehl  angegebenen Befehl durch Aufruf von
       /bin/sh -c befehl aus und kehrt zuruck nachdem der Befehl abgeschlossen
       wurde.  Wahrend  der  Ausfuhrung des Befehls wird SIGCHLD blockiert und
       sowohl SIGINT als auch SIGQUIT werden ignoriert.

R"UCKGABEWERT

       Im Fehlerfall wird -1 (z.B. fork(2) fehlgeschlagen) und andernfalls der
       Status  des  Befehls zuruckgegeben. Dieser letztgenannte Ruckgabestatus
       hat das in wait(2) spezifizierte Format.  In  dem  Fall,  dass  /bin/sh
       nicht  ausgefuhrt  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 zuruck, wenn die Shell verfugbar 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 Verfugung gestellt.

       Wie erwahnt, ignoriert system() SIGINT  und  SIGQUIT.  Dies  kann  dazu
       fuhren,  dass  Programme, die es in einer Schleife aufrufen, nicht mehr
       unterbrochen werden konnen, sofern sie nicht aufpassen, dass sie selbst
       den Exit-Status des Kindprozesses prufen. 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 fur einige Umgebungsvariablen benutzt
       werden  konnten,  die  moglicherweise die Systemintegritat 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 veranderte
       Bash, die dies unterlasst, wenn sie als sh aufgerufen wird.

       In  Glibc-Versionen  vor  2.1.3  wurde  die  Verfugbarkeit  von /bin/sh
       genaugenommen nicht uberpruft, wenn befehl NULL war. Stattdessen  wurde
       angenommen,  es  sei  verfugbar und system() gab in diesem Fall immer 1
       zuruck. Seit Glibc  2.1.3  wird  diese  Uberprufung  durchgefuhrt,  da,
       obwohl  POSIX.1-2001  eine  entsprechende  Implementierung benotigt, um
       eine Shell zur Verfugung zu stellen, diese Shell nicht  verfugbar  oder
       ausfuhrbar  sein  konnte, wenn das aufrufende Programm vorher chroot(2)
       aufrief (was nicht durch POSIX.1-2001 spezifiziert ist).

       Es ist moglich, dass der Shell-Befehl 127  zuruckgibt.  Dies  ist  kein
       eindeutiger Indikator dafur, dass der Aufruf von execve(2) fehlschlug.

SIEHE AUCH

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

KOLOPHON

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

"UBERSETZUNG

       Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick  Rother
       <krd@gulu.net> und Chris Leick <c.leick@vollbio.de> erstellt.

       Diese  Ubersetzung  ist  Freie Dokumentation; lesen Sie die GNU General
       Public  License  Version  3  oder  neuer   bezuglich   der   Copyright-
       Bedingungen. Es wird KEINE HAFTUNG ubernommen.

       Wenn  Sie  Fehler  in  der  Ubersetzung  dieser  Handbuchseite  finden,
       schicken     Sie     bitte     eine     E-Mail     an     <debian-l10n-
       german@lists.debian.org>.

                              10. September 2010                     SYSTEM(3)