On a UNIX system, the shell is the standard interface to handling processes on your system. Once the shell was the primary interface, however modern Linux systems have a GUI and provide a shell via a "terminal application" or similar. The primary job of the shell is to help the user handle starting, stopping and otherwise controlling processes running in the system.
When you type a command at the prompt of the shell, it will
fork a copy of itself and
exec the command that you have specified.
The shell then, by default, waits for that process to finish running before returning to a prompt to start the whole process over again.
As an enhancement, the shell also allows you to background a job, usually by placing an
& after the command name. This is simply a signal that the shell should fork and execute the command, but not wait for the command to complete before showing you the prompt again.
The new process runs in the background, and the shell is ready waiting to start a new process should you desire. You can usually tell the shell to foreground a process, which means we do actually want to wait for it to finish.
XXX : a bit of history about bourne shell