pgrep和pkill命令详解
pgrep 与 pkill 命令详解
一、基础功能
命令 | 作用 | 核心机制 |
---|---|---|
pgrep | 根据条件查找进程ID (PID) | 通过进程名、用户、终端等属性筛选进程,输出匹配的PID列表 |
pkill | 根据条件终止进程 | 向符合条件的进程发送信号(默认发送SIGTERM ,可指定其他信号) |
二、基础语法
pgrep [options] <pattern> # 查找进程
pkill [options] <pattern> # 终止进程
- 模式匹配:支持正则表达式匹配进程名或完整命令行
- 典型场景:批量管理同一类进程(如终止所有Nginx进程)
三、常用参数详解
1. 通用参数(适用于两者)
参数 | 作用 | 示例 |
---|---|---|
-u | 按用户过滤 | pgrep -u root → 显示root用户的所有进程 |
-f | 匹配完整命令行(包含参数) | pkill -f "python app.py" → 终止命令行含python app.py 的进程 |
-x | 精确匹配进程名 | pgrep -x nginx → 仅匹配进程名为nginx 的进程 |
2. pgrep 独有参数
参数 | 作用 | 示例 |
---|---|---|
-l | 显示进程名和PID | pgrep -l sshd → 输出1234 sshd 格式 |
-n | 仅显示最新启动的进程PID | pgrep -n chrome → 输出最近启动的Chrome进程PID |
-o | 仅显示最早启动的进程PID | pgrep -o java → 输出最早启动的Java进程PID |
3. pkill 独有参数
参数 | 作用 | 示例 |
---|---|---|
-<信号> | 指定发送的信号 | pkill -9 nginx → 发送SIGKILL 强制终止进程 |
-e | 显示终止的进程信息 | pkill -e -9 python → 显示被终止的Python进程详情 |
四、典型使用示例
-
查找进程
pgrep -u apache httpd # 查找apache用户运行的httpd进程 pgrep -d, -f "bash" # 用逗号分隔输出所有bash进程PID
-
终止进程
pkill -u devuser node # 终止devuser用户的所有node进程 pkill -HUP syslogd # 向syslogd进程发送SIGHUP信号(重载配置)
-
组合条件
pgrep -u root,daemon -t tty1 # 查找root或daemon用户在tty1终端的进程 pkill -e -9 -f "debug_mode" # 强制终止命令行含`debug_mode`的进程并显示详情
五、注意事项
-
权限限制
- 终止其他用户的进程需
root
权限 SIGKILL
(信号9)会强制终止进程且无法被捕获或忽略
- 终止其他用户的进程需
-
模糊匹配风险
pkill python
可能误杀包含python
关键字的非目标进程,建议优先使用-x
精确匹配
-
信号差异
SIGTERM
(默认)允许进程清理资源,SIGKILL
直接终止且可能导致资源未释放
六、关联命令对比
命令 | 特点 |
---|---|
kill | 需已知PID,适合精确操作单个进程 |
killall | 类似pkill ,但默认要求精确匹配进程名(如killall nginx ) |
通过pgrep
和pkill
,可快速实现进程的批量查询与管理,适用于自动化脚本和系统维护场景。建议优先使用pgrep
验证匹配结果后再执行pkill
,避免误操作。