Introduction to pgrep and pkill
When I’m managing background tasks and processes in Linux, I always reach for pgrep and pkill. These two commands are often overlooked, but they’re incredibly useful for searching for and managing processes by name. I’ve seen this go wrong when people use ps with grep - it’s just not as precise. With pgrep and pkill, you can avoid common mistakes when dealing with background tasks.
Using pgrep
pgrep is a great way to look up processes based on their name and other attributes. For example, to find the process ID (PID) of a running nginx process, you can use:
pgrep nginx
This command will output the PID(s) of the matching process(es), which can then be used for further management. Don’t bother with using ps and grep - pgrep is the way to go.
Using pkill
pkill is similar to pgrep, but instead of just searching for processes, it sends a signal to the matching processes. By default, pkill sends a SIGTERM signal, which asks the process to terminate cleanly. For instance, to stop a running nginx process, you can use:
pkill nginx
The real trick is to use the various options that pkill and pgrep support to narrow down your search. I usually start with the -u option to specify a user, or the -f option to match against the full command line.
Security Considerations
When using pkill, be cautious of the signals you send - some can have unintended consequences. This is where people usually get burned: sending a SIGKILL signal (using pkill -9) can lead to data corruption or other issues. In practice, it’s best to stick with SIGTERM (the default) for clean termination, unless you’re dealing with a process that’s not responding.
Practical Examples
- To find and kill all processes owned by a specific user, you can combine
pgrepwithpkill:
pkill -u username
- To search for processes matching a specific command line pattern, use the
-foption:
pgrep -f "pattern"
For more information, you can refer to the official documentation or use the man command:
man pgrep
man pkill
See also
- Simplifying Remote File Transfers with SSH and rsync Over a Jump Host
- Taming Log Rotation: Preventing Disk Space Issues with systemd-journald and Log File Management
- Taming Log Rotation: Strategies for Preventing /var/log Overflow on Busy Systems
- Taming systemd Service Restart Behavior: When to Use Restart, Retry, and Timeout Options
- Troubleshooting Broken Permissions on Shared Directories with setgid and ACLs