ps aux 和 ps -ef
在 Linux/Unix 系统中,ps aux
和 ps -ef
都是用于查看进程信息的命令,结合 grep node
可以筛选出与 Node.js 相关的进程。它们的核心功能相似,但在输出格式和选项含义上有区别:
1. 命令对比
命令 | 含义 | 主要区别 |
---|---|---|
ps aux | BSD 风格语法 | 列更详细(包含 CPU/内存占用) |
ps -ef | UNIX System V 风格语法 | 列更简洁(适合快速查看) |
2. 输出格式差异
ps aux
示例输出
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
nodeuser 123 1.2 3.1 102344 24500 ? Sl 10:00 0:05 /usr/bin/node app.js
- 包含资源信息:
%CPU
(CPU 占用率)、%MEM
(内存占用率)、VSZ
(虚拟内存)、RSS
(物理内存)。 - 适合调试性能问题。
ps -ef
示例输出
UID PID PPID C STIME TTY TIME CMD
nodeuser 123 1 0 10:00 ? 00:00:05 /usr/bin/node app.js
- 包含父子进程关系:
PPID
(父进程ID)更清晰。 - 适合查看进程依赖关系。
3. 关键区别总结
特性 | ps aux | ps -ef |
---|---|---|
语法风格 | BSD 风格 | UNIX System V 风格 |
CPU/内存占用 | ✅ 显示 | ❌ 不显示 |
PPID(父进程ID) | ❌ 不显示 | ✅ 显示 |
TTY 设备 | ✅ 显示 | ✅ 显示 |
命令路径 | ✅ 完整显示 | ✅ 完整显示 |
常用场景 | 检查资源占用 | 查看进程关系 |
4. 如何选择?
- 需要分析资源占用(如 Node.js 内存泄漏)→ 用
ps aux | grep node
。 - 需要终止进程时 → 两者均可,但
ps -ef
的PPID
可帮助识别守护进程。 - 跨系统兼容性 →
ps -ef
更通用(某些嵌入式 Linux 不支持aux
)。
5. 实用技巧
(1) 组合使用 grep
过滤
# 排除 grep 进程自身(避免干扰)
ps aux | grep [n]ode
ps -ef | grep [n]ode
(2) 查看完整命令行
若命令被截断,可指定 ww
选项(仅 BSD 风格支持):
ps auxww | grep node
(3) 按内存/CPU 排序
ps aux --sort=-%mem | grep node # 按内存降序
ps aux --sort=-%cpu | grep node # 按 CPU 降序
6. 为什么 grep node
可能不够?
Node.js 进程的实际命令可能是:
/usr/bin/node
node server.js
npm start
(实际是 Node 子进程)
更全面的筛选:
ps aux | grep -E 'node|npm'
总结
- 功能相同:两者都能找到 Node.js 进程。
- 细节差异:
aux
侧重资源,-ef
侧重进程关系。 - 推荐:
- 调试性能 →
ps aux | grep node
- 管理进程 →
ps -ef | grep node
+pstree -p <PID>
(查看树形结构)。
- 调试性能 →