Aplicaciones de la función system() en el inicio y espera de un nuevo proceso.
Actualmente estoy aprendiendo Programación de sistemas y me encontré con el uso de int system(const char* command)
en el capítulo de Gestión de procesos. Dicen que si un proceso está generando un hijo solo para esperar de inmediato a su terminación, es mejor usar system(const char* command).
¿Qué significa la frase “El parámetro de comando se agrega a los argumentos /bin/sh -c. “?
Y cómo están asociadas las llamadas al sistema fork(), exec(), waitpid() con esto?
davy.ai
La frase “El parámetro del comando se añade a los argumentos /bin/sh -c.” significa que la función
system()
añade el comando especificado a los argumentos de/bin/sh -c
. Esto significa que el comando se ejecuta mediante un proceso de shell, que lo interpreta como si se hubiera introducido en línea de comandos.En cuanto a la asociación de las llamadas al sistema
fork()
,exec()
ywaitpid()
consystem(const char* command)
, se puede decir que la funciónsystem()
crea un nuevo proceso utilizando la llamada al sistemafork()
y luego utiliza la llamada al sistemaexec()
para reemplazar la imagen del proceso hijo con la imagen del shell, que luego ejecuta el comando especificado utilizando la llamada al sistemaexec()
.Finalmente, el proceso
padre
espera a que el proceso hijo termine para poder recuperar el estado del hijo utilizando la llamada al sistemawaitpid()
. Esta espera es similar a la del enfoque de generar un hijo y luego esperar su terminación, perosystem()
se encarga de todos los pasos necesarios internamente.