Whats a job in Linux
A job is a process that the shell manages. Each job is assigned a sequential job ID. Because a job is a process, each job has an associated PID. There are three types of job statuses:
1. Foreground: When you enter a command in a terminal window, the command occupies that terminal window until it completes. This is a foreground job.
2. Background: When you enter an ampersand (&) symbol at the end of a command line, the command runs without occupying the terminal window. The shell prompt is displayed immediately after you press Return. This is an example of a background job.
3. Stopped: If you press Control + Z for a foreground job, or enter the stop command for a background job, the job stops. This job is called a stopped job.
Job Control Commands
Job control commands enable you to place jobs in the foreground or background, and to start or stop jobs. The table describes the job control commands.
Option | Description |
---|---|
jobs | Lists all jobs |
bg %n | Places the current or specified job in the background, where n is the job ID |
fg %n | Brings the current or specified job into the foreground, where n is the job ID |
Control-Z | Stops the foreground job and places it in the background as a stopped job |
Running a Job in the Background
To run a job in the background, you need to enter the command that you want to run, followed by an ampersand (&) symbol at the end of the command line. For example, run the sleep command in the background.
$ sleep 100 & [1] 1302 $
The shell returns the job ID, in brackets, that it assigns to the command and the associated PID. With the job ID, you can use the job control commands to manage the job whereas the kernel uses PIDs to manage jobs.
When a background job is complete and you press Return, the shell displays a message indicating the job is done.
[1] + Done sleep 100 & $
Managing the background jobs
You can use the jobs command to list the jobs that are currently running or suspended in the background.
$ jobs [1]+ Running sleep 100 &
You can use the fg command to bring a background job to the foreground.
$ fg % 1 sleep 100
You can use the ‘Control+Z keys and bg command to return a job to the background. The Control+Z keys suspend the job, and place it in the background as a stopped job. The bg command runs the job in the background. For example:
1. Using CTRL+Z
$ sleep 100 ^Z [1]+ Stopped sleep 100
$ jobs [1]+ Stopped sleep 100
2. Using bg
$ bg % 1 [1]+ sleep 100 &
$ jobs [1]+ Running sleep 100 &