2024-10-17
Before diving into jobs
, let’s quickly review background processes. In Linux, you can run commands in the background using the ampersand (&) symbol. This allows you to continue using your terminal while the command executes. For instance:
sleep 60 &
This command starts a sleep
process that will pause execution for 60 seconds, but it runs in the background, freeing your terminal. However, you might need a way to manage these background processes, and that’s where jobs
comes in.
jobs
Command: Listing Your Background ProcessesThe simplest use of jobs
is to list currently running background jobs:
jobs
This will output a list like this (the output may vary depending on your jobs):
[1]+ Running sleep 60 &
[2]- Running long_running_script.sh &
Each line represents a background job. [1]+
and [2]-
are job numbers. The +
indicates the current job, while -
indicates the previous job. Running
shows the status, and the rest is the command itself.
jobs
jobs
isn’t just for listing; it also lets you control your background processes.
To bring a background job to the foreground, use fg
along with the job number or job specifier (e.g., %1
or %sleep
).
fg %1 # Brings job 1 to the foreground
fg %sleep # Brings the job with "sleep" in its command to the foreground
Once a job is in the foreground, you can interact with it directly. Pressing Ctrl+Z will suspend it, returning it to the background.
You can stop a background job using kill
with the job number. This sends a SIGTERM
signal, which allows the process to gracefully shut down.
kill %1 # Sends SIGTERM to job 1
kill %2 # Sends SIGTERM to job 2
If the process doesn’t respond to SIGTERM
, you can use kill -9 %1
(or kill -9 <job_number>
), which sends a SIGKILL
signal, forcefully terminating the process. Use this option cautiously as it doesn’t allow for a clean shutdown.
Sometimes, jobs might be stopped (e.g., by pressing Ctrl+Z). The jobs
command will list these as well:
jobs -l # Show detailed job information including PID
This command displays detailed information, including the process ID (PID), for advanced process management.
jobs
with Other Commandsjobs
is often used in conjunction with other commands like wait
. wait
pauses the script until a specified background process finishes.
long_running_command &
pid=$! # get PID of the last background process
wait $pid # wait until process with $pid completes
echo "Long running command finished!"
This example demonstrates how you can efficiently manage a background process and ensure other parts of the script only continue after it’s completed.
jobs
OptionsThe jobs
command has many other options you can look at to tailor its output:
jobs -p
: Displays only the process IDs.jobs -n
: Shows only the new jobs since the last jobs
command.By mastering the jobs
command, you gain significant control over background processes in your Linux environment, increasing your efficiency and allowing for more complex scripting and task management.