A foreground process holds the terminal. It reads your keyboard input, and the shell waits for it to finish before giving you a prompt. A background process runs while the shell gives the prompt back, so you can keep working. Adding & to a command starts it in the background.
Job control moves processes between the two. Ctrl+Z suspends the foreground job, bg resumes it in the background, and fg brings it back. Closing the terminal sends a hangup signal that ends your jobs, so start long jobs with nohup or disown them.
# Run command in background
command & # Start in background
nohup command & # Continue after logout
# Job control
jobs # List current jobs
fg %1 # Bring job 1 to foreground
bg %1 # Send job 1 to background
Ctrl+Z # Suspend current process
Ctrl+C # Terminate current process
# Detach from terminal
nohup long_command > output.log 2>&1 &
disown %1 # Remove job from shell
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓