Разница между использованием fork/execvp и системным вызовом
В чем разница между использованием system() для выполнения двоичного кода и использованием комбинации fork/execvp.
Есть ли разница в безопасности/пропускной способности/производительности.
Ответы
Ответ 1
Система также использует комбинацию fork
/exec
.... Если вы выполняете fork
/exec
самостоятельно, вы можете выполнить параллель с выполняемым процессом, тогда как system
блокирует (включает wait
).
Кроме того, system
выполняет команду не напрямую, а через оболочку (что создает проблемы с битом setuid) и system
блокирует/игнорирует определенные сигналы (SIGINT, SIGCHILD, SIGQUIT).
Ответ 2
Да, system()
запускает команду через оболочку, а exec()
запускает команду напрямую. Конечно, введение оболочки открывается для ошибок и эксплойтов.
Изменить: конечно, справочная страница содержит более подробную информацию.
Ответ 3
system()
будет fork()
/exec()
оболочкой, а затем оболочкой будет fork()
/exec()
программа, которую вы хотите запустить.
So system()
в два раза тяжелее, чем fork()
/exec()
Ответ 4
system() работает в Windows, но fork() не делает.
Если вы не используете уровень совместимости, такой как Cygwin, но даже тогда вилка может быть очень дорогой.
Ответ 5
там также popen(), который похож на system(), но позволяет читать дочерний вывод и предоставлять ввод