目录
- 一、基础进程定位
- 1. 服务进程快速检索
- 2. 多条件复合查询
- 二、高级进程诊断
- 3. 进程树分析
- 4. 僵尸进程定位
- 三、系统管理实践
- 5. 服务状态监控脚本
- 6. 时间敏感进程追踪
- 四、安全审计技巧
- 7. 隐蔽进程检测
- 8. 网络连接关联
- 五、性能优化场景
- 9. CPU占用分析
- 10. 内存泄漏追踪
- 六、pgrep参数详解表
- 七、排错注意事项
一、基础进程定位
1. 服务进程快速检索
# 查找Nginx主进程(精确匹配)
pgrep -x nginx# 查找包含"java"的进程(模糊匹配)
pgrep -f "java.*Dspring.config"
2. 多条件复合查询
# 查找用户www运行的PHP-FPM进程
pgrep -u www php-fpm# 排除root用户查找sshd进程
pgrep -v -u root sshd
二、高级进程诊断
3. 进程树分析
# 显示进程名和PID(调试父子进程关系)
pgrep -l -d " -> " httpd
# 输出示例:890 -> httpd -> 891 -> httpd
4. 僵尸进程定位
# 结合ps查找僵尸进程
ps -A -ostat,pid | grep Z | awk '{print $2}' | xargs pgrep -P
三、系统管理实践
5. 服务状态监控脚本
#!/bin/bash
SERVICE="mysqld"
if pgrep -x "$SERVICE" >/dev/null; thenecho "$(date): $SERVICE is running" >> /var/log/service_monitor.log
elsesystemctl restart $SERVICE
fi
6. 时间敏感进程追踪
# 查找启动超过30天的进程
pgrep -o -t $(date -d "30 days ago" +%Y%m%d%H%M)
四、安全审计技巧
7. 隐蔽进程检测
# 查找无二进制文件的进程(需root)
pgrep -a -f "^/tmp/" | grep -vE "(\.sh|\.py)$"
8. 网络连接关联
# 查找监听80端口的进程
ss -tuln | grep ":80 " | awk '{print $5}' | cut -d: -f2 | xargs pgrep -f
五、性能优化场景
9. CPU占用分析
# 结合top实时监控Java进程
watch -n 1 "pgrep java | xargs top -p"
10. 内存泄漏追踪
# 周期性记录进程内存
while true; do pgrep -f app_server | xargs ps -o pid,rss --no-headers >> mem.logsleep 60
done
六、pgrep参数详解表
参数 | 功能说明 | 典型场景 |
---|---|---|
-l |
显示进程名 | 确认进程对应程序 |
-a |
显示完整命令行 | 识别不同启动参数的实例 |
-n |
选择最新启动的进程 | 定位最近启动的服务 |
-o |
选择最旧进程 | 查找长期运行的守护进程 |
-P |
指定父进程ID | 分析进程树结构 |
-t |
按终端过滤 | 检测异常登录会话 |
-G |
按用户组过滤 | 审计特定用户组的进程 |
七、排错注意事项
- 权限限制:普通用户无法查看其他用户进程,需用
sudo
- 进程伪装:恶意进程可能伪造进程名,需结合
-a
参数验证 - systemd干扰:使用
systemctl status
验证服务进程更可靠
示例:验证可疑进程
$ pgrep -a xmr-stak
1234 /usr/lib/systemd/systemd-journald
5678 /tmp/.cache/mysql/xmr-stak
# 发现伪装成系统服务的挖矿程序
建议将常用查询封装为alias:
alias pgcpu='pgrep -f java | xargs ps -o pcpu,pmem,cmd --sort=-pcpu'