在 Ubuntu 中,查看进程是否运行的方法有多种,以下是常见的 8 种方式,按场景分类整理:
1. 快速检查(推荐脚本使用)
pgrep
命令
pgrep <进程名或模式>
# 示例:检查 nginx 是否运行
if pgrep nginx > /dev/null; then
echo "Nginx 正在运行"
else
echo "Nginx 未运行"
fi
# 统计进程数量(返回数量,0 表示未运行)
pgrep -c nginx
pidof
命令
pidof <进程名>
# 示例:检查 MySQL 是否运行
if pidof mysqld > /dev/null; then
echo "MySQL 正在运行"
fi
2. 交互式查看
ps
+ grep
组合
ps aux | grep <进程名或关键字>
# 示例:检查 Firefox 进程
ps aux | grep -i firefox
# 避免 grep 自身干扰的技巧:
ps aux | grep '[f]irefox'
top
/ htop
实时监控
top # 动态查看所有进程(按 q 退出)
htop # 增强版 top(需安装:sudo apt install htop)
3. 服务状态检查(仅限系统服务)
systemctl
(systemd 服务)
systemctl status <服务名>
# 示例:检查 Apache2 服务状态
systemctl status apache2
# 返回 "active (running)" 表示运行中
4. 进程树查看
pstree
命令
pstree | grep <进程名>
# 示例:检查 SSH 服务进程
pstree | grep sshd
5. 通过 /proc
目录(底层方法)
ls /proc | grep <进程名或PID>
# 示例:检查 PID 为 1234 的进程是否存在
ls /proc/1234
# 若存在目录则表示进程运行
6. 发送测试信号(静默检查)
kill -0
命令
kill -0 $(pgrep <进程名>) 2>/dev/null && echo "进程存在" || echo "进程不存在"
# 示例:检查 Nginx 进程
kill -0 $(pgrep nginx) 2>/dev/null && echo "Nginx 运行中"
7. 结合脚本工具
pkill -0
(静默检查)
pkill -0 <进程名> && echo "进程存在" || echo "进程不存在"
# 示例:检查 Python 脚本
pkill -0 "python3 script.py" && echo "脚本运行中"
总结对比
方法 | 适用场景 | 特点 |
---|---|---|
pgrep /pidof | 脚本自动化、快速判断 | 直接返回 PID,适合条件判断 |
ps + grep | 交互式查看详细信息 | 可查看完整命令行,但需注意过滤干扰项 |
systemctl | 检查系统服务状态 | 仅适用于 systemd 管理的服务 |
top /htop | 实时监控资源占用 | 动态查看 CPU、内存等资源 |
kill -0 | 静默测试进程存在性 | 不干扰进程运行,适合脚本中的逻辑判断 |
根据需求选择合适的方法,脚本中推荐 pgrep
或 pidof
,交互式调试可用 ps
或 htop
。