Linux Nohup Command: How to Run Processes in Background

The nohup command in Linux runs a process immune to hangup (SIGHUP) signals, so it keeps running after you close the terminal or disconnect SSH. Basic syntax: nohup command &. Output goes to nohup.out by default.

What Is the Nohup Command?

Nohup (no hang up) is a Linux/Unix command that runs a process immune to SIGHUP signals. This means the process continues running after you close the terminal, log out, or disconnect SSH.

The nohup command is a core Linux utility that keeps processes running after the terminal is closed or the user logs out. Its name stands for "no hang up," referring to its ability to ignore the SIGHUP (Signal Hang Up) signal that normally terminates processes when their controlling terminal disconnects.

Without nohup, closing a terminal, logging out, or losing a network connection usually sends a SIGHUP signal to child processes, causing them to stop. Running a command with nohup prevents this by ignoring SIGHUP, allowing the process to continue independently while still responding to other signals such as SIGTERM and SIGKILL.

By default, nohup also redirects standard output and error to the nohup.out file (unless another destination is specified), preserving logs even after the terminal session ends. Once the parent shell exits, the process is reparented to the system's init process or systemd, ensuring it remains running under normal system supervision.

Nohup Command Syntax and Usage

The nohup command follows a straightforward syntax pattern that prioritizes simplicity while providing essential functionality for process protection. The basic command structure accommodates various usage scenarios, from simple script execution to complex command pipelines requiring persistent operation.

Standard syntax implementation for the nohup command follows this pattern:

nohup command [arguments] [options]

Version verification helps ensure compatibility and feature availability across different Linux distributions:

nohup --version

This command displays the installed nohup version information, which can be crucial for troubleshooting compatibility issues or understanding available feature sets in different environments.

Command combination patterns demonstrate how the nohup command integrates with other Linux utilities to create comprehensive process management solutions. The most common pattern involves combining nohup with background execution using the ampersand operator:

nohup command [arguments] &

Output redirection capabilities represent a critical aspect of nohup functionality, allowing administrators to control where process communications are stored and how they can be accessed later. The default behavior redirects output to 'nohup.out', but explicit redirection provides more control:

nohup command > custom_output.log 2>&1 &

Nohup Command Examples — Practical Use Cases

Script execution scenarios demonstrate how the nohup command protects custom automation scripts from session disconnections. Consider a data processing script that requires several hours to complete:

#!/bin/bash

echo "Starting data processing at $(date)"

for i in {1..1000}; do

echo "Processing batch $i of 1000"

sleep 10 # Simulate processing time

done

echo "Data processing completed at $(date)"

Launching protected processes using the nohup command ensures this script continues execution even if the administrator's SSH session disconnects:

nohup ./data_processing.sh

The nohup command automatically creates 'nohup.out' to capture script output, providing a complete execution log that remains accessible regardless of session status.

Background execution patterns combine nohup protection with background processing to free up terminal sessions for other tasks:

nohup ./data_processing.sh &

This approach returns control to the terminal immediately while ensuring the script continues running with full session disconnect protection.

Custom output management allows administrators to organize process logs according to specific naming conventions and storage locations:

nohup ./data_processing.sh > /var/log/processing/batch_$(date +%Y%m%d).log 2>&1 &

Process monitoring techniques help track nohup-protected processes using standard Linux utilities:

# Find running processes by name

pgrep -a data_processing

# Monitor process status

ps aux | grep data_processing

# View live output

tail -f /var/log/processing/batch_20240101.log

Network service examples showcase how the nohup command in linux protects long-running network operations:

nohup ping -c 86400 google.com > connectivity_test.log 2>&1 &

This command performs extended connectivity testing that continues running regardless of administrative session status, providing comprehensive network monitoring data.

Nohup Command to Run Processes in Background

Running a command with nohup allows it to continue executing after you close the terminal or log out of the system. In most cases, nohup is combined with the & operator to start the process in the background and immediately return control to the shell.

nohup python3 backup.py &

The shell prints the process ID and exits without interrupting the running task. You can verify that the process is still active with commands such as ps, pgrep, or jobs if it remains associated with the current shell.

If you need to stop the process later, identify its PID and terminate it with kill.

kill <PID>

Even on an affordable VPS, nohup provides a lightweight way to keep scheduled scripts and maintenance commands running without requiring a persistent terminal session. For long running scripts, backups, software builds, and data processing jobs, this approach ensures the task continues even if the terminal session ends unexpectedly. 

Understanding nohup.out — Output Redirection

When no output destination is specified, nohup automatically redirects both standard output (stdout) and standard error (stderr) to a file named nohup.out. The file is created in the current working directory, or in the user's home directory if the current location is not writable.

nohup ./script.sh &

To monitor the output while the process is running, use:

tail -f nohup.out

In production environments, it is usually better to redirect output to a dedicated log file instead of relying on the default nohup.out.

nohup ./script.sh > script.log 2>&1 &

This keeps logs organized, simplifies troubleshooting, and prevents multiple background processes from writing to the same output file. This approach is particularly useful on a high load VPS, where maintenance tasks, deployments, and data processing jobs often run unattended for extended periods.

Nohup vs Tmux vs Screen — Which to Use?

Screen vs Nohup analysis reveals fundamental differences in approach and capabilities. The nohup command focuses specifically on process persistence, offering minimal overhead and maximum simplicity for single-task scenarios. Screen provides comprehensive session management with window multiplexing capabilities but requires more system resources and learning investment.

Key differences in functionality highlight when to choose each tool:

nohup command : Best for fire-and-forget tasks, minimal resource overhead, simple output logging

Screen : Ideal for interactive sessions, multiple concurrent tasks, session reattachment requirements

Tmux : Superior for complex workflow management, advanced scripting, modern terminal features

Performance impact comparison shows that the nohup command introduces minimal system overhead because it only modifies signal handling and output redirection without creating additional session management infrastructure. Screen and tmux create persistent session frameworks that consume more memory and CPU resources but provide significantly more functionality.

Integration scenarios demonstrate how these tools can work together effectively. The nohup command in linux can protect processes within screen or tmux sessions, providing multiple layers of persistence protection:

# Within a screen session

screen -S data_processing

nohup ./long_running_task.sh &

# Detach with Ctrl+A, D

Nohup vs Tmux vs Screen — Comparison Table

Although nohup, tmux, and screen are all used to keep long running tasks alive, they solve different problems.

Linux Process Management with Nohup

Effective Linux process management often requires tasks to keep running even after a terminal session ends. The nohup command is a simple and reliable solution for scripts, backups, software deployments, data processing, and other long running jobs that do not require further user interaction. By preventing the process from receiving the SIGHUP signal, nohup ensures that execution continues until the task finishes or is stopped manually.

nohup is particularly useful on remote servers where SSH sessions may disconnect unexpectedly. Whether you need to run backups, update applications, or execute maintenance scripts, you can safely run nohup on your Linux VPS without worrying about the process being interrupted when your connection closes.

For applications that require persistent interactive terminal sessions, tools such as tmux or screen are a better fit. However, when the goal is simply to launch a command and let it finish independently, nohup remains one of the most lightweight and practical options available on Linux.

Troubleshooting Common Issues and Silent Failures

Output file permission problems frequently cause nohup command failures when the current directory lacks write permissions. The nohup utility attempts to create 'nohup.out' in the current directory first, then falls back to '$HOME/nohup.out' if the initial attempt fails:

# Check current directory permissions

ls -ld .

# Verify home directory accessibility

ls -ld $HOME

# Use explicit output redirection to avoid permission issues

nohup ./script.sh > /tmp/script_output.log 2>&1 &

Process environment differences can cause applications to behave differently under nohup compared to interactive execution. The nohup command inherits a potentially minimal environment that might lack custom PATH settings, environment variables, or shell configurations:

# Capture current environment for comparison

env > interactive_env.txt

# Launch with explicit environment

nohup env > nohup_env.txt &

# Compare environments

diff interactive_env.txt nohup_env.txt

Silent failure detection requires a systematic approach to identify why nohup-protected processes terminate unexpectedly. The process protection works correctly, but the application itself exits due to internal errors:

# Enable detailed error logging

nohup bash -x ./problematic_script.sh > debug_output.log 2>&1 &

# Monitor for immediate failures

sleep 5 && ps aux | grep problematic_script

Resource exhaustion scenarios can cause processes to terminate despite nohup protection. Memory limits, disk space constraints, and file descriptor limits affect process execution regardless of signal protection:

# Monitor resource usage

nohup bash -c "

./memory_intensive_task &

PID=\$!

while kill -0 \$PID 2>/dev/null; do

echo \"Memory: \$(ps -p \$PID -o rss --no-headers) KB\"

echo \"Files: \$(lsof -p \$PID | wc -l)\"

sleep 30

done

" > resource_monitor.log 2>&1 &

Nohup Command FAQ

What distinguishes the nohup command from simple background execution? 

The nohup command provides signal immunity specifically against SIGHUP, while background execution using '&' only detaches the process from terminal input/output. Combining both approaches offers maximum protection and usability.

How does output redirection work with the nohup command? 

By default, the nohup command redirects stdout and stderr to 'nohup.out' in the current directory, or '$HOME/nohup.out' if write permissions are insufficient. Custom redirection overrides this behavior completely.

Can the nohup command protect against all types of process termination? 

The nohup command only protects against SIGHUP signals. Processes remain vulnerable to SIGTERM, SIGKILL, resource exhaustion, application errors, and system shutdown procedures.

What happens to nohup processes during system maintenance? 

Nohup-protected processes continue running during user session changes and network disconnections but terminate during system reboots or shutdown procedures like any other process.

How can I monitor multiple nohup processes effectively? 

Use process monitoring tools like 'ps', 'pgrep', and 'htop' combined with log monitoring utilities like 'tail', 'multitail', or enterprise monitoring solutions to track nohup-protected processes comprehensively.

How to use nohup to run a process in background?

Place nohup before the command and add an ampersand at the end. This keeps the process running in the background after the terminal is closed.

Where does nohup.out go?

The nohup.out file is usually created in the current directory. If that directory is not writable, the file is saved in the user’s home directory.

How to stop a nohup process?

Find the process ID and terminate it with the kill command. Make sure you select the correct process before stopping it.

Blog