Це спростити інтерфейс. Альтернативою fork
і exec
буде щось подібне до функції CreateProcess Windows . Зауважте, скільки параметрів CreateProcess
має, і багато з них - це структури з ще більшою кількістю параметрів. Це тому, що все, що ви хочете контролювати щодо нового процесу, має бути передано CreateProcess
. Насправді CreateProcess
не вистачає параметрів, тому Microsoft довелося додати CreateProcessAsUser та CreateProcessWithLogonW .
У fork/exec
моделі вам не потрібні всі ці параметри. Натомість певні атрибути процесу зберігаються впоперек exec
. Це дозволяє вам fork
, а потім змінити будь-які атрибути процесу, які ви хочете (використовуючи ті самі функції, які ви використовували нормально), а потім exec
. У Linux fork
немає параметрів і execve
має лише 3: програму, яку потрібно запустити, командний рядок для її надання та її оточення. (Є й інші exec
функції, але вони просто обгортки, що execve
надаються бібліотекою С для спрощення випадків звичайного використання.)
Якщо ви хочете , щоб почати процес з інших поточних каталогом: fork
, chdir
, exec
.
Якщо ви хочете Перенаправлення STDIN / STDOUT: fork
, закриття / відкриті файли, exec
.
Якщо ви хочете , щоб користувачі перемикача: fork
, setuid
, exec
.
Всі ці речі можна комбінувати за потребою. Якщо хтось придумав новий вид атрибутів процесу, вам не доведеться змінювати fork
і exec
.
Як зазначалося в ларках, більшість сучасних Unixes використовують копіювати при записі, тому fork
це не передбачає значних витрат.
fork(2)
сторінці man під 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.