2009-05-16 8 views
7

He estado leyendo su página de manualidades pero todavía no he tenido éxito en averiguar cómo funciona. En el sistema que llama(), ¿hay un nuevo proceso secundario bifurcado y el shell binary exec() - ed en él? Aunque puede ser una suposición estúpida.¿Cómo funciona el sistema() exactamente en Linux?

Respuesta

10

Sí, el sistema() es esencialmente un fork() y un exec() "sh -c" para la cadena de comando pasada. Se puede encontrar una implementación de ejemplo (de eglibc, recientemente bifurcada de glibc) here.

+0

Gracias, ese enlace fue realmente útil :) – user108127

1

Sí, el sistema ("foo bar") es equivalente a execv ("/ bin/sh", ["sh", "-c", "foo bar"]).

+1

Posix requiere que el sistema() ignore SIGINT y SIGQUIT y bloquee SIGCHLD. –

+0

Sí. El ejemplo de implementación al que Lance apuntó hace eso. – user108127

Cuestiones relacionadas