Как оболочка может запустить другой процесс, без с использованием exec?
fork()
(или лучше clone()
в настоящее время в Linux) просто говорит о дублировании процесса. Итак, у вас есть 2 копии одного и того же процесса.
execve()
(и -le, -lp, -vp, -v friends) просто говорят о том, чтобы полностью заменить текущий процесс новым процессом. (сохраняя ФД, но не намного)
Таким образом, чтобы запустить другую программу, вы должны сначала fork()
, а затем exec()
в одном из результирующих процессов (обычно это дочерний процесс).