在 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>
(查看樹形結構)。
- 調試性能 →