pgrep [选项] 模式
| 选项 | 说明 |
|---|---|
-l |
显示进程名称和进程ID |
-f |
匹配完整的命令行(包括参数) |
-u |
匹配指定用户拥有的进程 |
-x |
精确匹配进程名称 |
-n |
显示最新的(最近的)匹配进程 |
-o |
显示最老的匹配进程 |
-P |
匹配指定父进程ID的子进程 |
-G |
匹配指定组ID的进程 |
-U |
匹配指定UID(用户ID)的进程 |
-t |
匹配指定终端(tty)的进程 |
-a |
显示完整的命令行 |
-c |
统计匹配的进程数量 |
-d 分隔符 |
指定输出分隔符(默认是换行) |
-v |
反向匹配,显示不匹配的进程 |
-i |
忽略大小写 |
pgrep 和 pkill 是兄弟命令,它们使用相同的匹配规则:
# 查找nginx进程的PID
pgrep nginx
# 查找包含"php"的进程
pgrep php
# 显示进程名和PID
pgrep -l nginx
# 显示完整的命令行
pgrep -a nginx
# 匹配包含特定参数的进程
pgrep -f "nginx: master process"
# 查找使用特定端口的进程
pgrep -f ":80"
# 只匹配完全为"nginx"的进程名(不会匹配"nginx-worker")
pgrep -x nginx
# 查找root用户的nginx进程
pgrep -u root nginx
# 查找www-data用户的进程
pgrep -u www-data
# 显示最新的nginx进程
pgrep -n nginx
# 显示最老的nginx进程
pgrep -o nginx
# 查找父进程ID为1的所有子进程
pgrep -P 1
# 统计nginx进程数量
pgrep -c nginx
# 用逗号分隔PID
pgrep -d "," nginx
# 显示不是root用户的进程
pgrep -v -u root
# 忽略大小写匹配
pgrep -i NGINX
# 查找www-data用户的nginx进程,显示名称和PID
pgrep -lu www-data nginx
# 查找nginx主进程的完整命令行
pgrep -fax nginx
# 用pgrep找到的PID来kill进程
kill $(pgrep nginx)
# 查看进程的详细信息
ps -p $(pgrep nginx)
# 查看进程打开的文件
lsof -p $(pgrep nginx)
$ pgrep -l nginx
1234 nginx
1235 nginx
1236 nginx
$ pgrep -a nginx
1234 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
1235 nginx: worker process
1236 nginx: worker process
$ pgrep -c nginx
3
$ pgrep -d "," nginx
1234,1235,1236
#!/bin/bash
# 检查服务是否运行,如果没运行则启动
SERVICE="nginx"
if pgrep -x "$SERVICE" >/dev/null
then
echo "$SERVICE 服务正在运行"
else
echo "$SERVICE 服务未运行,正在启动..."
systemctl start $SERVICE
fi
# 监控特定进程的内存使用
while true; do
PIDS=$(pgrep nginx)
for PID in $PIDS; do
MEM_USAGE=$(ps -p $PID -o %mem | tail -1)
echo "PID $PID 内存使用: $MEM_USAGE%"
done
sleep 5
done
| 命令 | 主要用途 | 优点 | 缺点 |
|---|---|---|---|
pgrep |
通过名称查找进程ID | 专门为查找PID设计,选项丰富 | 功能相对单一 |
ps + grep |
查找和筛选进程信息 | 功能强大,显示信息全面 | 输出需要额外解析,语法复杂 |
pidof |
查找进程ID | 简单易用,快速查找 | 功能简单,选项少 |
pkill |
查找并杀死进程 | 查找和操作一体化 | 可能误杀进程,需谨慎 |
传统方式:
ps aux | grep nginx | grep -v grep | awk '{print $2}'
现代方式:
pgrep nginx
pgrep更加简洁、安全,避免了误匹配到grep进程本身的问题。
-f选项可以匹配完整的命令行pgrep命令通常包含在procps或procps-ng软件包中,大多数Linux发行版默认已安装。
# 检查是否已安装
which pgrep
或
pgrep --version
# Ubuntu/Debian安装(如果需要)
sudo apt-get install procps
# CentOS/RHEL/Fedora安装
sudo yum install procps-ng
# Arch Linux
sudo pacman -S procps-ng
# 验证安装
pgrep --help