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)