Ну, другие ответы в основном правильно.
Система, хотя не только fork
с, а затем exec
с, она не exec
ваш процесс, она запускает оболочку по умолчанию, передавая вашу программу в качестве аргумента.
Итак, если вы действительно не хотите использовать оболочку (для разбора параметров и т. П.), То намного эффективнее сделать что-то вроде:
int i = fork();
if ( i != 0 ) {
exec*(...); // whichever flavor fits the bill
} else {
wait(); // or something more sophisticated
}