Pause a running script in Mac terminal and then resume later
Categories:
Mastering Script Control: Pause and Resume in Mac Terminal

Learn how to effectively pause and resume running scripts and processes in your macOS terminal using various shell commands and signals. This guide covers foreground and background processes, ensuring you maintain control over your command-line tasks.
Managing processes in the terminal is a fundamental skill for any developer or system administrator. Sometimes, you need to temporarily halt a running script or command, perhaps to check something else, free up resources, or simply take a break, and then pick up exactly where you left off. This article will guide you through the essential commands and techniques to pause and resume processes in the macOS terminal, focusing on both foreground and background tasks.
Pausing a Foreground Process
When a script or command is running directly in your terminal, it's considered a foreground process. The simplest way to pause such a process is by sending it a SIGTSTP
signal, which tells the process to stop temporarily. This is typically achieved with a keyboard shortcut.
sleep 600
An example of a foreground process that will run for 10 minutes.
sleep
command is excellent for testing process control, as it simply waits for a specified duration without consuming significant CPU resources.1. Initiate the Pause
While the foreground process is running, press Ctrl + Z
. You will typically see a message like [1]+ Stopped sleep 600
.
2. Verify Process Status
You can use the jobs
command to see a list of all stopped or backgrounded processes in your current shell session. The output should confirm your sleep
command is stopped.
Resuming a Paused Process
Once a process is paused, it's no longer actively executing. To resume it, you have two primary options: bring it back to the foreground or send it to the background to continue running without occupying your terminal prompt.
flowchart TD A[Running Foreground Process] --> B{Ctrl + Z} B --> C[Paused Process (Stopped)] C --> D{Resume Option?} D -->|Foreground| E[fg %job_id%] D -->|Background| F[bg %job_id%] E --> G[Running Foreground] F --> H[Running Background]
Workflow for pausing and resuming a terminal process.
Resume in Foreground
To bring the most recently stopped job back to the foreground, use the fg
command:
fg
If you have multiple stopped jobs, you can specify the job ID (e.g., fg %1
for job 1, as seen in the jobs
output).
Resume in Background
To resume the most recently stopped job in the background, use the bg
command:
bg
Similar to fg
, you can specify a job ID (e.g., bg %1
). The process will continue running, and you'll get your terminal prompt back immediately.
Managing Background Processes
Once a process is in the background, you might need to check its status, bring it back to the foreground, or terminate it. The jobs
command is your primary tool for this.
# List all jobs (stopped and running in background)
jobs
# Bring job 1 to foreground
fg %1
# Terminate job 1 (send SIGTERM)
kill %1
# Forcefully terminate job 1 (send SIGKILL)
kill -9 %1
Commands for managing background processes.
Understanding how to pause and resume scripts in your Mac terminal provides significant flexibility and control over your command-line environment. Whether you're debugging, running long-duration tasks, or simply need to multitask, these techniques are invaluable for efficient terminal usage.