How to set a shell process to background

Sometimes you need to run a long-running command in a shell, but you also need to be able to exit the shell without canceling the command. This is where backgrounding processes comes in.

Backgrounding a process means that the process will continue to run even after you exit the shell. This can be useful for tasks such as running a web server or downloading a large file.

To background a process, simply append an ampersand (&) to the end of the command. For example, to run the Python HTTP server in the background, you would use the following command:

python -m http.server &

This will start the HTTP server, but the shell will not wait for it to finish running. You can then exit the shell without affecting the server.

1. Viewing background processes

To view a list of all the background processes that are currently running, you can use the jobs command. This will display a list of process IDs (PIDs) and command names.

2. Disowning background processes

By default, background processes are associated with the current shell session. This means that if you exit the shell, the background processes will be terminated.

To prevent this, you can use the disown command to disown a background process. This will remove the process from the current shell session, so it will continue to run even if you exit the shell.

To disown a background process, simply use the disown command followed by the PID of the process. For example, to disown the Python HTTP server that we started earlier, we would use the following command:

disown %1

This will disown the process with the PID 1.

3. Example

Here is an example of how to use backgrounding and disowning to run a long-running command in a shell:

# Start the Python HTTP server
python -m http.server

# Ctrl+z

# View a list of all background processes
jobs

# Disown the Python HTTP server
disown %1

# Exit the shell
exit

Now, even though we have exited the shell, the Python HTTP server will continue to run in the background. We can check this by running the ps command:

ps aux | grep python

This will show us a list of all Python processes that are currently running. We should see the Python HTTP server process listed here.

We can now stop the Python HTTP server at any time by running the following command:

killall python

This will kill all Python processes that are currently running.

4. Conclusion

Backgrounding and disowning processes are powerful tools that can be used to run long-running commands in a shell without blocking the shell. This can be useful for a variety of tasks, such as running web servers, downloading large files, and processing data.