Bg, Fg, &, Ctrl-Z – 5 Examples to Manage Unix Background Jobs

by SathiyaMoorthy on May 5, 2010

When you execute a unix shell-script or command that takes a long time, you can run it as a background job.

In this article, let us review how to execute a job in the background, bring a job to the foreground, view all background jobs, and kill a background job.

1. Executing a background job

Appending an ampersand ( & ) to the command runs the job in the background.

For example, when you execute a find command that might take a lot time to execute, you can put it in the background as shown below. Following example finds all the files under root file system that changed within the last 24 hours.

# find / -ctime -1 > /tmp/changed-file-list.txt &

2. Sending the current foreground job to the background using CTRL-Z and bg command

You can send an already running foreground job to background as explained below:

  • Press ‘CTRL+Z’ which will suspend the current foreground job.
  • Execute bg to make that command to execute in background.

For example, if you’ve forgot to execute a job in a background, you don’t need to kill the current job and start a new background job. Instead, suspend the current job and put it in the background as shown below.

# find / -ctime -1 > /tmp/changed-file-list.txt

# [CTRL-Z]
[2]+  Stopped                 find / -ctime -1 > /tmp/changed-file-list.txt

# bg

3. View all the background jobs using jobs command

You can list out the background jobs with the command jobs. Sample output of jobs command is

# jobs
[1]   Running                 bash download-file.sh &
[2]-  Running                 evolution &
[3]+  Done                    nautilus .

4. Taking a job from the background to the foreground using fg command

You can bring a background job to the foreground using fg command. When executed without arguments, it will take the most recent background job to the foreground.

# fg

If you have multiple background ground jobs, and would want to bring a certain job to the foreground, execute jobs command which will show the job id and command.

In the following example, fg %1 will bring the job#1 (i.e download-file.sh) to the foreground.

# jobs
[1]   Running                 bash download-file.sh &
[2]-  Running                 evolution &
[3]+  Done                    nautilus .

# fg %1

5. Kill a specific background job using kill %

If you want to kill a specific background job use, kill %job-number. For example, to kill the job 2 use

# kill %2

To kill a foreground jobs, use one of the methods specified in our earlier article 4 Ways to Kill a Process — kill, killall, pkill, xkill.


Linux Sysadmin Course Linux provides several powerful administrative tools and utilities which will help you to manage your systems effectively. If you don’t know what these tools are and how to use them, you could be spending lot of time trying to perform even the basic administrative tasks. The focus of this course is to help you understand system administration tools, which will help you to become an effective Linux system administrator.
Get the Linux Sysadmin Course Now!

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

{ 15 comments… read them below or add one }

1 yoander May 5, 2010 at 9:50 am

Nice!!!

2 stuff May 6, 2010 at 10:54 pm

very usefull !

3 Andy January 24, 2011 at 8:04 pm

Thanks, exactly what I am looking for.

4 Alex P March 11, 2011 at 2:38 pm

How to determine if a process running background or foreground?
Especially, from inside: i.e. script going to use ‘read var <temr' from a terminal, but it is bad idea, if script running background; so, need to skipp reading.

5 pepe June 9, 2011 at 4:18 pm

thank you. Useful tricks ;D

6 Anonymous February 17, 2012 at 12:51 am

after executing ctrl+z and bg command on a running process, will the process resume from the point where it stopped?

7 jameslee February 23, 2012 at 7:57 pm

Excellent

8 Anonymous September 14, 2012 at 4:06 pm

how would you run the .sh script without bringing it to the foreground first?

9 Shiva Komuravelly November 16, 2012 at 2:52 am

Gud one..
Came to know to put a foreground running process to background in between…

10 Anonymous April 9, 2013 at 10:58 am

Awesome!

11 Anonymous May 1, 2013 at 1:06 am

How can I suspend a background job?

12 Mahesh June 13, 2013 at 12:51 am

Proved to be useful for me.

Thank You.

13 Subramani Sekar August 2, 2013 at 7:56 am

Super
Thanks

14 Nasir September 27, 2013 at 4:21 pm

Thanks. this is really helpfull.

15 Mohamed Mansoor October 12, 2013 at 11:55 am

Nice

Leave a Comment

Previous post:

Next post: