2009-05-16 5 views
7

Ich habe seine Manpage gelesen, aber noch nicht gelungen, herauszufinden, wie es funktioniert. Auf den Aufruf von System(), ist ein neuer Kindprozess gegabelt und die Shell binary exec() - ed in ihm? Das kann aber eine dumme Vermutung sein.Wie system() genau unter Linux arbeiten?

Antwort

10

Ja, system() ist im wesentlichen eine fork() und exec() "sh -c" für die übergebene Befehlszeichenfolge. Eine beispielhafte Implementierung (von eglibc, kürzlich gegabelt von glibc) kann here finden.

+0

Danke, dieser Link war wirklich hilfreich :) – user108127

1

Ja, System ("foo bar") äquivalent zu execv ("/ bin/sh", [ "sh", "C", "foo bar"]).

+1

Posix erfordert, dass das System() ignorieren und SIGINT SIGQUIT und Block SIGCHLD. –

+0

Ja. Die Beispielimplementierung, auf die Lance hingewiesen hat, macht das. – user108127