Це спростити інтерфейс. Альтернативою 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.