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 it's self 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