Разница между использованием fork / execvp и системным вызовом - PullRequest
12 голосов
/ 20 ноября 2008

В чем разница между использованием system () для выполнения двоичного файла и использованием комбинации fork / execvp

Есть ли разница в безопасности / переносимости / производительности?

Ответы [ 5 ]

13 голосов
/ 20 ноября 2008

Система также использует комбинацию fork / exec .... Если вы выполняете fork / exec самостоятельно, вы можете выполнять параллельно выполняемому процессу, в то время как system блокирует (включая wait). Также system выполняет команду не напрямую, а через оболочку (которая создает проблемы с битом setuid) и system блокирует / игнорирует определенные сигналы (SIGINT, SIGCHILD, SIGQUIT).

7 голосов
/ 20 ноября 2008

Да, system() запускает команду через оболочку, а exec() запускает команду напрямую. Конечно, введение оболочки открывает ошибки и эксплойты.

Редактировать: конечно, справочная страница предоставляет более подробную информацию.

6 голосов
/ 20 ноября 2008

system() будет fork() / exec() оболочкой, а затем оболочка fork() / exec() программой, которую вы хотите запустить.

Так что system() в два раза тяжелее fork() / exec()

3 голосов
/ 20 ноября 2008

system () работает в Windows, а fork () - нет.

Если вы не используете слой совместимости, такой как Cygwin, но даже тогда вилка может быть очень дорогой.

2 голосов
/ 20 ноября 2008

есть также popen (), которая похожа на system (), но позволяет читать выходные данные дочернего элемента и предоставлять ввод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...