Yes you are missing something;
fork
exec
allows you to spawn a child process while keeping the parent process running. See
http://linux.die.net/man/2/fork[
^] (or use your local man pages) for how to identify whether you are in the child or parent process.
That is how the interactive shells operate. You can do it in a simple console application that uses a loop to read commands from standard input and take action accordingly. Whether that action is done within the application, or by spawning a child process is dependent on the command.