c++ - proceso - reglas de llamadas al sistema
Diferencia entre el uso de fork/execvp y la llamada al sistema (5)
Cuál es la diferencia entre usar system () para ejecutar un binario y usar la combinación de fork / execvp.
¿Hay alguna diferencia de seguridad / portabilidad / rendimiento?
Sí, system()
ejecuta el comando a través de un shell, mientras que exec()
ejecuta el comando directamente. Por supuesto, la introducción de un shell se abre para los errores y exploits.
Editar: por supuesto, la página man proporciona más detalles.
system () funciona en Windows pero fork () no funciona.
A menos que use una capa de compatibilidad como Cygwin, pero incluso una horquilla puede ser muy costosa.
también hay popen (), que es como system (), pero permite leer el resultado del niño y proporcionar entrada
system()
fork()
/ exec()
el shell, y luego shell fork()
/ exec()
el programa que deseas iniciar.
Entonces system()
es dos veces más pesado que fork()
/ exec()
El sistema también usa una combinación fork
/ exec
... Si lo hace fork
/ exec
usted mismo puede ejecutar en paralelo a su proceso de ejecución, mientras que el system
está bloqueando (incluye la wait
). Además, el system
ejecuta el comando no directamente, sino a través de un shell (que causa problemas con el bit setuid) y bloquea / ignora determinadas señales (SIGINT, SIGCHILD, SIGQUIT).