Shell Process Management Commands Practice

Introduction to Process Management in Shell Scripting

Process management is a fundamental aspect of shell scripting, allowing scripts to control, monitor, and interact with running processes. This section explores key commands and techniques for managing processes in a shell script, focusing on practical applications.

Key Process Management Commands

pgrep

pgrep is used to search for processes by name, pattern, or other criteria. It returns the process IDs (PIDs) of matching processes.

Usage Example:

pgrep sshd

This command outputs the PIDs of SSH daemon processes running on the current system.

Note: pgrep is ideal for debugging and identifying processes by name.

ps

ps displays the current processes, providing information such as PID, command, CPU usage, and memory usage.

Usage Example:

ps -e -f --sort -%cpu

This command lists all processes sorted by CPU usage.

Note: ps can be filtered with grep for specific criteria, e.g., ps -e -f | grep 'grep'.

kill

kill terminates processes by PID or signal. It supports options like -9 (force termination) and -15 (default signal).

Usage Example:

kill -9 $(pgrep sshd)

This command forcefully terminates all SSH daemon processes.

Note: Use kill -15 for graceful termination to avoid unexpected behavior.

wait

wait waits for a process to complete, ensuring scripts don’t exit prematurely. It accepts a PID or process name.

Usage Example:

timeout 5s ./script.sh && wait

This command runs a script for 5 seconds and waits for it to finish.

Note: wait is essential for managing background processes and ensuring script stability.

jobs

jobs lists background processes and allows control via bg or fg.

Usage Example:

./script.sh &
jobs

This command runs a script in the background and shows the job IDs.

Note: Use bg to requeue a job and fg to bring a background job to the foreground.

pkill

pkill terminates processes by name, pattern, or PID. It is useful for cleanup tasks.

Usage Example:

pkill -f "grep"

This command terminates all instances of grep processes.

Note: pkill is often used in scripts to clean up unnecessary processes.

Practical Applications and Examples

Monitoring Processes

Scripts can monitor processes in real-time using ps or pgrep.

Example:

while true; do ps -e -f | grep -v 'grep' | grep -v 'grep'; sleep 1; done

This command continuously checks for running processes and filters out its own output.

Managing Background Jobs

Scripts can manage background jobs using jobs and wait.

Example:

./script.sh &
jobs

This command runs a script in the background and lists the job IDs.

Cleaning Up Processes

Scripts can terminate processes using kill or pkill.

Example:

kill -9 $(pgrep -f "grep")

This command forcefully terminates all grep processes.

Best Practices and Considerations

  1. Error Handling: Use trap to handle errors gracefully.

    trap 'echo "Error occurred"' ERR
    
  2. Process Termination: Use wait to ensure processes are terminated properly.

  3. Resource Management: Monitor processes with ps and avoid resource leaks.

  4. Security: Use pkill with caution, as it can terminate unintended processes.

Conclusion

Process management commands are critical for writing efficient and reliable shell scripts. Commands like pgrep, ps, kill, and wait enable scripts to monitor, control, and terminate processes effectively. By mastering these commands, developers can create scripts that are robust, secure, and maintainable.