A job is any command you've started that has not completed. The shell provides a job control facility that lets you stop (suspend) commands temporarily and resume them later, or move commands back and forth between the foreground and the background.
Job control gives you a form of job multiplexing that lets you manage the execution of your commands and switch between jobs:
You can move a slow foreground job to the background, and work on something else while the slow job runs. Suppose you're running a large sort command or a network file copy that takes longer than you expected. Rather than killing the command and rerunning it in the background (which wastes the time you've already spent), you can stop the command, resume it in the background, and work on other things while it finishes.
You can put a command to sleep, then wake it up again when you're ready to continue. For instance, if you're editing a file and find you need to check some other files before proceeding, job control gives you an alternative to quitting the editor. Just suspend the editor and resume it later, after running the other commands. You'll be returned to the point where you left off—with no need to read the file back in and find your position again.
You can kill a command, e.g., if it starts producing runaway output, or you decide that you simply don't want to let it finish.
Try the examples shown below to learn how job control works. Table 3-4 summarizes ...