The standard method for moving a foreground process to background involves:
# Start process
wget http://example.com/large-file.iso
# Pause with Ctrl+Z
^Z
[1]+ Stopped wget http://example.com/large-file.iso
# Continue in background
bg %1
While there's no single-key equivalent to Ctrl+Z that backgrounds directly, these methods achieve similar results:
1. Using disown with Job Control
# Start process normally
python long_running_script.py
# Pause (Ctrl+Z), then:
bg
disown -h %1
2. Screen/Tmux Solution
For persistent backgrounding:
# Start screen session
screen
# Run process
make build
# Detach (Ctrl+A then D)
# Process continues running
For processes that handle SIGTSTP (Ctrl+Z signal) poorly:
# Find process ID
ps aux | grep "wget"
# Send to background
kill -SIGCONT PID
Best practice is to anticipate background needs:
# Basic backgrounding
wget http://example.com/file &
# With output redirection
nohup python script.py > output.log 2>&1 &
Be aware of these process states during backgrounding:
- T: Stopped (by Ctrl+Z or signal)
- S: Interruptible sleep
- R: Running or runnable
- Z: Zombie process
When you need to background a running foreground process in Linux/Unix, the typical workflow is:
# Start process in foreground
wget http://example.com/large-file.iso
# Suspend with Ctrl+Z
^Z
[1]+ Stopped wget http://example.com/large-file.iso
# Move to background
bg %1
The traditional method has a critical limitation - it stops the process during suspension before moving it to background. For operations like downloads, this creates unwanted network interruptions.
1. Using disown with Shell Job Control
# Start process
wget http://example.com/big-file.zip
# Directly background without stopping (bash/zsh)
disown -h %1 && bg %1
2. The bg Alternative (Some Shells)
In certain shells like zsh, you can use:
bg -r %1 # The -r flag prevents suspension
3. Terminal Multiplexer Approach
For complex workflows, use tmux/screen:
tmux new -s download_session
wget http://example.com/huge-file.tar.gz
Ctrl+b d # Detach without stopping
When backgrounding processes:
- Use
nohup
if you need persistence after logout - Monitor with
jobs -l
orps aux | grep wget
- Consider
reptyr
for stealing existing processes
# Start compilation
make -j4
# Realize you need terminal access
disown -h %1 && bg %1
# Verify it's running
jobs -l
ps aux | grep make
Remember that some processes may behave differently when backgrounded - particularly those requiring terminal interaction or real-time output.