How To Run a Process in the Background in Linux?

Learn via video courses
Topics Covered

How To Run a Process in Background in Linux?

Running processes in the background is a common requirement in Linux systems. Running a process in the background allows you to continue using the terminal or execute other commands while the process runs independently. This can be particularly useful for long-running tasks or when you want to execute multiple commands simultaneously. In this article, we will explore different methods on how to run a process in background in Linux and understand how to manage them effectively.

What is a Background Processes

Before we dive into the various methods, let's first understand what a background process is. In Linux, a background process refers to a process that runs independently of the terminal. When you execute a command, it typically runs in the foreground, meaning it occupies the terminal until it completes. On the other hand, running a process in the background allows you to execute other commands while the process continues to run silently. In this article, we will explore the ins and outs of how to run a process in background in Linux, equipping you with the knowledge to manage background processes and enhance your overall Linux experience efficiently.

How to Use the bg Command in Linux

One way to run a process in the background is by using the bg command. The bg command is built-in to most Linux distributions and allows you to send a running process to the background. Let's dive into the details of how to run a process in background in Linux using the bg command and explore the steps involved:

  1. Start a process in the foreground by executing a command. For example, let's say we want to compress a large file using the gzip command:
  2. While the process is running, press Ctrl+Z to pause the process and bring it to the background.
  3. Use the bg command to resume the process in the background:

The process will now continue running in the background, and you will see its job ID displayed on the terminal. You can execute other commands while it progresses silently. However, keep in mind that the process may still produce output, which can appear on the terminal.

& Symbol

Another method to run a process in the background is by appending the ampersand symbol & to the command you execute. This symbol tells the shell to start the process in the background immediately. Here's an example:

In this example, the gzip command starts running in the background as soon as you execute it. The process ID (PID) will be displayed on the terminal, allowing you to continue using the shell while the process completes silently.

It's important to note that when using the & symbol, the process may still produce output, which can interfere with the prompt on the terminal. To avoid this, it's recommended to redirect the output to a file or to /dev/null, which discards the output. You can do this by appending > filename or > /dev/null to the command, respectively.

Using the Screen Command

The screen command is a powerful tool that allows you to create and manage multiple terminal sessions within a single shell session. It enables you to detach and reattach to these sessions, making it an ideal solution for running processes in the background that need to persist even after you close the terminal. Here's how you can use the screen command:

  1. Start a new screen session by typing the following command:
  2. Once inside the screen session, you can execute your desired command or run a script as you would in a regular terminal session.
  3. To detach from the screen session and leave the process running in the background, press Ctrl+a followed by d.
  4. You will be returned to the main shell session, and the screen session with the process will continue running independently.
  5. To reattach to the screen session and resume working with the process, use the command:
    This will bring you back to the screen session, where you can view the output of the process and interact with it if needed.

The screen command is especially useful when working on remote servers or for long-running tasks that require persistent access.

Using the "systemd" Command

In modern Linux distributions that use systemd as the init system, you can utilize systemd to run processes in the background and manage them as system services. This method provides more control and flexibility in managing long-running processes. Here's how you can do it:

  1. Create a service unit file with a .service extension. This file defines the properties and behaviour of the background process. For example, let's create a file named myprocess.service:
  2. In the service unit file, add the necessary configuration. Here's an example:
    In this example, you need to replace /path/to/myprocess with the actual command or script you want to run in the background.
  3. Save the file and exit the text editor.
  4. Reload systemd to read the new service unit file:
  5. Start the background process using systemd:
    The background process will now start and run independently as a system service. You can view its status, stop it, or configure it to start automatically on system boot using various systemctl commands.

Using the "tmux" Command

Another method for running processes in the background in Linux is by utilizing tmux, a terminal multiplexer that allows you to create and manage multiple terminal sessions within a single window. Here's how you can use tmux to run processes in the background:

  1. Start a new tmux session by entering the following command in your terminal:
    This will create a new tmux session named mysession.
  2. Within the tmux session, execute your desired command or run a script as you would in a regular terminal session.
  3. Detach from the tmux session by pressing the following key combination:
    This will detach you from the tmux session, but the process running within it will continue to run in the background.
  4. To reattach to the tmux session and resume working with the process, use the following command:
    This will bring you back to the tmux session, allowing you to view the output of the process and interact with it if needed.

The advantage of using tmux is that it provides a persistent environment for running processes in the background. You can detach from the session, log out, and even shut down your system, and the processes running within tmux will continue to run. This makes it ideal for long-running tasks or remote sessions where you need to maintain process continuity.

Using the "at" Command

The at command in Linux allows you to schedule the execution of commands or scripts at a specific time in the future. While its primary purpose is not to run processes in the background, you can leverage it to achieve that effect. Here's how you can use the at command to run processes in the background:

  1. Open a terminal and enter the at command followed by the time at which you want the process to start. For example, to start a process in 5 minutes, you can use the following command:
    After executing the above command, the terminal will switch to a different prompt where you can enter the command or script you want to run in the background. For instance:
    Replace ./myscript.sh with the actual command or script you want to run.
  2. Press Ctrl+D to exit the at prompt. The process will be scheduled to run in the background at the specified time.
  3. To check the status of the scheduled job or view its output, you can use the atq command to list the scheduled jobs, and then the at -c <job-id> command to display the details of a specific job. For example:
    The process will start running in the background at the scheduled time, and you can monitor its output or check its status as needed.

Using the "batch" Command

In Linux, you can use the batch command to run processes in the background when the system load is low. The batch command is similar to the at command, but it schedules jobs to run only when the system load average drops below a certain threshold. Here's how you can use the batch command:

  1. Open a terminal and enter the batch command followed by the command or script you want to run in the background. For example:
    Replace ./myscript.sh with the actual command or script you want to run.
  2. Press Ctrl+D to submit the job to the batch queue. The process will be scheduled to run in the background when the system load average is low.
  3. You can check the status of the scheduled job or view its output using the atq command to list the scheduled jobs, and then the at -c <job-id> command to display the details of a specific job. For example:
  4. When the system load average drops below the specified threshold, the process will start running in the background, and you can monitor its output or check its status as needed.

The batch command is useful for running processes in the background when the system load is relatively low. It ensures that the execution of the job does not impact the performance of other tasks running on the system.

jobs Command

To manage background processes effectively, Linux provides the jobs command. The jobs command displays a list of all the processes running in the background and their corresponding job IDs. It also indicates whether a process is currently running, stopped, or completed. Here's how you can use it:

  1. Execute the jobs command to view a list of background processes:
    The output will show the job ID, status, and the command associated with each background process.
  2. To bring a background process to the foreground, use the fg command followed by the job ID. For example, to bring job number 1 to the foreground:

Signals

Job control in Linux allows you to manage processes by sending signals to them. Signals are notifications sent to processes to indicate events or requests. Understanding how to control and manage background processes using signals is crucial for effective process management. By understanding these signals, you'll know how to run a process in background in Linux and manage it effectively.

  1. SIGINT (Ctrl+C):
    This signal is sent when you press Ctrl+C on the terminal. It is typically used to interrupt a running process and request it to terminate.
  2. SIGSTOP (Ctrl+Z):
    This signal is sent when you press Ctrl+Z on the terminal. It suspends the execution of a process and puts it in a stopped state.
  3. SIGCONT:
    This signal is used to resume a stopped process. It is often sent to a process to bring it back to the foreground or resume its execution in the background.
  4. SIGTERM:
    This signal is sent to terminate a process gracefully. It allows the process to perform any necessary cleanup before exiting.
  5. SIGHUP:
    This signal is sent when a terminal or session is disconnected. It is commonly used to instruct processes to reload configuration files.

To send signals to processes, you can use the kill command followed by the appropriate signal and the process ID (PID). Here's an example:

For instance, to send the SIGTERM signal to a process with PID 1234512345, you can use the following command:

Example

Let's consider an example to further illustrate the usage of the jobs command:

  1. Start a process in the background:
  2. Execute the jobs command to see the list of background processes:
    The output may look like this:

In this example, we compressed the file largefile.txt using the gzip command, redirecting the output to /dev/null to discard it. The jobs command shows that job number 11 is running in the background.

How to Show Background Processes

You can use the ps command to display the currently running background processes. The ps command provides information about active processes on your system. By combining it with appropriate options, you can filter and display only the background processes. Here's an example:

In this example, the -ef option is used to display information about all processes, and the grep background filters the output to show only processes containing the word "background". This allows you to identify and track your Linux system's background processes easily.

How to Make a Process Persistent After Shell Dies

By default, when you exit the shell or terminal, all the background processes associated with that shell are terminated. However, there are methods to make a process persistent even after the shell dies. One way is to use the nohup command. The nohup command allows you to run a command immune to hangups, which means it continues running even if the terminal is closed. Here's how to use it:

For example, to run a Python script called myscript.py in the background and make it persistent after the shell dies, you can use the following command:

The nohup command redirects the output to a file named nohup.out by default. This file captures the standard output and error messages from the process. You can check this file later to review any output produced by the background process.

Managing Background Processes with disown

In addition to the methods discussed earlier, Linux provides the disown command to manage background processes. The disown command allows you to detach a process from the current shell, making it immune to hangups and preventing it from being terminated when the shell exits. Here's how you can use it:

  1. Start a process in the background using the & symbol or the bg command.
  2. Once the process is running in the background, you can use the jobs command to view a list of background processes along with their job IDs.
  3. Identify the job ID of the process you want to disown.
  4. To disown the process, use the disown command followed by the job ID. For example, if the job ID is 1:
    The process is now disassociated from the current shell and will continue running even after the shell is closed.

Using "nohup" with "disown"

You can combine the nohup command and the disown command to make a process both immune to hangups and independent of the shell. By using nohup before executing the command and then using disown, you ensure that the process continues running even if the shell is closed. Here's an example:

This combination of commands allows you to run a process in the background, prevent it from being terminated when the shell exits, and detach it from the current shell.

Conclusion

  • Running processes in the background in Linux is a valuable technique that allows you to multitask and increase your productivity.
  • In this article, we explored various methods to run processes in the background, such as using the bg command, appending the & symbol, and employing the nohup command for persistence.
  • We also learned how to manage background processes using the jobs and ps commands.
  • With these techniques at your disposal, you can effectively utilize your Linux system and accomplish tasks efficiently.