при вызове fork () подумайте о клонировании (у вас есть изображение одного, но вы ждете, что они одинаковые - какой является первым, а какой - вторым / клонированным?), Под основным становится дочерний поток нить (родитель / ребенок). Разветвление - это системный вызов, но накладные расходы минимальны, если вы не последуете вызову exec. Таким образом, разветвление / освобождение действительно стоит вам много в Unix.
fork: дочерний процесс принимает атрибуты родительского элемента, поэтому в одном и том же пространстве памяти есть две отдельные секции исполняемого кода (один родительский и один дочерний). Чтобы разделить два последующих действия вызовом 'exec', теперь секция дочернего кода становится отдельным исполняемым процессом и имеет идентификатор родителя от своего родительского процесса. Если вам нужно было использовать только fork (), то вам придется управлять отдельными разделами кода: кто родитель, кто ребенок.
Вызов exec - это издержки ядра, а не разветвление.