常见命令-资源查看-pgrep命令实践


一、基础进程定位

1. 服务进程快速检索

# 查找Nginx进程(精确匹配)
pgrep -x nginx

# 查找nginx最旧进程
pgrep -o nginx

2. 多条件复合查询

# 查找用户root运行的nginx进程
pgrep -u root nginx

# 排除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 -I{}  pgrep -P {}

三、系统管理实践

5. 服务状态监控脚本

#!/bin/bash
SERVICE="mysqld"
if pgrep -x "$SERVICE" >/dev/null; then
    echo "$(date): $SERVICE is running" >> /var/log/service_monitor.log
else
    systemctl 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. CPU占用分析

# 结合top实时监控Java进程
watch -n 1 "pgrep java | xargs top -p"

9. 内存泄漏追踪

# 周期性记录进程内存
while true; do 
    pgrep -f app_server | xargs ps -o pid,rss --no-headers >> mem.log
    sleep 60
done

六、pgrep参数详解表

参数 功能说明 典型场景
-l 显示进程名 确认进程对应程序
-a 显示完整命令行 识别不同启动参数的实例
-n 选择最新启动的进程 定位最近启动的服务
-o 选择最旧进程 查找长期运行的守护进程
-P 指定父进程ID 分析进程树结构
-t 按终端过滤 检测异常登录会话
-G 按用户组过滤 审计特定用户组的进程

七、排错注意事项

  1. 权限限制:普通用户无法查看其他用户进程,需用sudo
  2. 进程伪装:恶意进程可能伪造进程名,需结合-a参数验证
  3. 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'
posted @ 2025-03-19 20:46  天天向上327  阅读(24)  评论(0)    收藏  举报