Это для упрощения интерфейса. Альтернативой forkи execбудет что-то вроде функции Windows CreateProcess . Обратите внимание, сколько параметров CreateProcessимеет, и многие из них являются структурами с еще большим количеством параметров. Это потому, что все, что вы можете контролировать в новом процессе, должно быть передано CreateProcess. На самом деле CreateProcessне хватает параметров, поэтому Microsoft пришлось добавить CreateProcessAsUser и CreateProcessWithLogonW .
С fork/execмоделью вам не нужны все эти параметры. Вместо этого определенные атрибуты процесса сохраняются exec. Это позволяет вам forkзатем изменить любые атрибуты процесса, которые вы хотите (используя те же функции, которые вы обычно используете), а затем exec . В Linux forkне имеет параметров и execveимеет только 3: программу для запуска, командную строку для ее выдачи и ее среду. (Существуют и другие execфункции, но они являются просто обертками, execveпредоставляемыми библиотекой C, для упрощения общих случаев использования.)
Если вы хотите , чтобы начать процесс с другим текущим каталогом: fork, chdir, exec.
Если вы хотите Перенаправление STDIN / STDOUT: fork, закрытие / открытые файлы, exec.
Если вы хотите , чтобы пользователи переключателя: fork, setuid, exec.
Все эти вещи могут быть объединены по мере необходимости. Если кто-то придумает новый тип атрибута процесса, вам не нужно менять forkи exec.
Как уже упоминалось, большинство современных Unix-систем используют копирование при записи, поэтому forkне требует значительных накладных расходов.
fork(2)странице руководства под Linux написано: «Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.Я представляю (но не знаю наверняка), что это имеет место для других современных разновидностей Unix.