Это дизайн.
Люди используют не fork (), а шаблон fork () - exec () для создания нового процесса. Мне кажется, что вы заставляете вашу оболочку понимать cat, cd и т. Д., И у меня складывается впечатление, что вы создали не оболочку, а программу REPL. Это хорошо. Например, в Bash также есть некоторые команды, работающие таким образом (например, определенные вами функции, «bg» и т. Д.), Но вы ограничили функциональность своей оболочки только тем, что реализовали.
Однако fork-exec позволяет вашей оболочке запускать программу. И что более важно, запускаемая программа не будет связываться с вашей оболочкой. Например, никакая ошибка сегментации в программе не может остановить работу вашей оболочки. На мой взгляд, эта часть является более важным аспектом оболочки.