How-To Guides and Blog

How to Control Jobs Using Bash Job control in Linux

NBH Support
No Comments

The fact that Linux is a multitasking operating system, they allow users to run multiple jobs/commands simultaneously. This is an exciting feature in Linux and Unix-like systems as users are bound to choose either to run a command on the foreground or at the background.

Firstly, let us get to know what a job control and a job means in the Linux world before digging in deep to understand how jobs are managed from the command line.

Job control is a feature of the shell which allows a single shell instance to run and manage multiple commands. Let me try to break this down. Job control is a command that allows users to run jobs either on the foreground or at the background

Then a job is a running task or command which can be running on the foreground or at the background. These jobs have a unique ID called the job number.

To understand better on the concept of a background and a foreground job in Linux, I will have to redirect your thinking to the windows operating system you are conversant with. In windows, you cannot run multiple applications at a time. It is either you send one to the background and bring one back to the foreground. Imagine working in a Microsoft word environment and trying to access your music folder, it is possible, but you can’t run both applications simultaneously. Immediately you click on another folder, it sends your current work environment to the background. You also have the option to minimize


jobs: The job command are used to view all jobs that are running or suspended

fg: The fg command is used to bring running or suspended job to the foreground

bg: The bg command sends jobs to the background

stop or Ctrl+ Z: The stop command or pressing the combination of control key and Z on the keyboard are used to suspend a job

kill or Ctrl +C: The kill command or pressing the combination of control key and C on the keyboard are used to terminate or kill a job

Please look up the commands above as reference when trying to run a job. We will have to take a practical example bit by bit for clear understanding.


Any command can be started in the background or by appending an ampersand (&) to the end of the command line or by pressing ctrl + z. The bash shell displays the job number and the PID of the new child process.

Let’s execute some jobs with the sleep command. First, enter the top command on your terminal and pick out the process ID of any job.

Here we have executed the sleep command to sleep three processes using their process ID. Now, they are running on the background.

To list a job, we use the job command as seen in the command above


A background job can be brought to the foreground by entering the fg command, followed by the job number.

The syntax is as follows:

fg %Job number

The above command brought job number 4 to the foreground. Note that when a job is running on the foreground, it occupies the entire terminal, preventing the user from using the terminal until it’s sent to the background.


To send a foreground job to the background, you can either press ctrl+z on the keyboard, or you enter the bg command followed by the job ID of the job. The ctrl+z will suspend the job and placed it in the background as a stopped job while the bg command sends the job to the background but in a running state.

You can see from the command above, by pressing ctrl+z, I stopped the job, and by entering bg command, I placed the job in the running state.


To view information relating to a job, you use the ps j command


Use jobs –r to list only running processes

Use jobs –s to list only suspended processes

Use jobs –l to list only process ID of the jobs

Use the kill %job number command to kill a job

When you place a stopped job either on the foreground or background, it will restart

Other shells support job control except for the Bourne shell (sh)

Just like windows operating systems, you can’t run more than one foreground job on this same terminal

You can run different jobs on different terminals

Some processes are started by the system kernel itself and cannot be brought to the foreground.

Background processes do not read or receive keyboard generated interrupts from the terminal


Red Hat System Administrator I Student Workbook