Provided by: manpages-de-dev_1.4-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

       This page is part of release 3.54 of the Linux man-pages project.  A  description  of  the  project,  and
       information about reporting bugs, can be found at 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)