Exploring the Use of the 'jobs' Command in Shell (with examples)
- Linux
- December 17, 2024
The ‘jobs’ command is a powerful shell builtin utility that allows users to view information about processes or tasks that have been started during the current shell session. Primarily seen in Unix and Unix-like operating systems environments, ‘jobs’ comes in handy when managing multiple processes, whether they are running in the foreground or background. With various options, users can precisely control how they view these jobs, allowing for better process management and multitasking efficiency directly from the command line. By learning to use ‘jobs’, you can easily track your processes’ status, identify process IDs and much more.
Use case 1: View jobs spawned by the current shell
Code:
jobs
Motivation:
Using the jobs
command with no additional options is the most straightforward way to check all the jobs you have started in the current shell session. It’s particularly useful when you’ve sent multiple processes to the background and want a quick overview of what’s running and their state (running or stopped).
Explanation:
The basic jobs
command lists all jobs created by the current shell session. It displays each job with a number, associated command, and its current state.
Example output:
[1] + running sleep 500 &
[2] - stopped vi example.txt
Use case 2: List jobs and their process IDs
Code:
jobs -l
Motivation:
This use case becomes essential when you need more detailed information about your jobs, especially when needing to control them using their process IDs (PIDs). It’s beneficial for scripting or when you need to terminate an unresponsive job using kill
.
Explanation:
The -l
option extends the basic functionality of jobs
by including the PID of each job, which is critical for direct process management tasks.
Example output:
[1] 39784 running sleep 500 &
[2] 39845 stopped vi example.txt
Use case 3: Display information about jobs with changed status
Code:
jobs -n
Motivation:
Over time, the status of jobs can change (from running to stopped or completed). Using the -n
flag allows you to quickly see which jobs have changed status since the last notification, crucial when monitoring long-running processes.
Explanation:
The -n
option filters the jobs list to only show those with a changed status since the last time you were informed. This ensures that users are informed about relevant status changes without re-printing all jobs.
Example output:
[1] + done my_script.sh
Use case 4: Display only process IDs
Code:
jobs -p
Motivation:
When you’re focused on process management and need a clean output with just PIDs, the -p
option is unparalleled. It’s useful in scripts or when chaining commands, where you require PIDs to apply further operations like kill
or wait
.
Explanation:
By employing the -p
flag, the command outputs only the PIDs of the jobs managed by the current shell, allowing users to capture and use them directly in other commands.
Example output:
39784
39845
Use case 5: Display running processes
Code:
jobs -r
Motivation:
If you are dealing with numerous jobs but only need to see which ones are actively running, -r
is the perfect choice. This can help in focusing resource monitoring on what’s consuming CPU or memory currently.
Explanation:
The -r
option restricts the output to only those jobs that are in a running state, filtering out stopped or completed jobs.
Example output:
[1] + running sleep 500 &
Use case 6: Display stopped processes
Code:
jobs -s
Motivation:
When you want to revisit or restart processes that have been stopped, perhaps to modify or complete them, using -s
provides a swift way to list those jobs without the clutter of running processes.
Explanation:
With the -s
flag, the jobs
command returns only jobs that are currently stopped, making it simple to identify tasks that need further action.
Example output:
[2] - stopped vi example.txt
Conclusion:
The jobs
command, with its array of options, presents users with a comprehensive toolkit for managing and monitoring background and foreground processes efficiently within the shell environment. By understanding and utilizing its diverse command line options, users can significantly enhance their multitasking capabilities and process management workflows, leveraging the full potential of what Unix-like operating systems offer.