Provided by: manpages-de-dev_1.4-1_all 

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)