Linux 進程可包含多個執行緒,掌握執行緒數對效能調校、死鎖排查至關重要。本文介紹 top -H、ps -eLf、ps -T、/proc/ 四種查看方式,並解析 ps 輸出的狀態碼含義。

top -H
# 每列顯示一個執行緒,而非進程
# 按 H 切換執行緒/進程模式
ps -eLf
# LWP 欄位為執行緒 ID (TID)
# NLWP 欄位為該進程總執行緒數
ps -T -p 1234
# SPID 為執行緒 ID
ls /proc/1234/task/ | wc -l # 直接數目錄數 = 執行緒數
cat /proc/1234/status | grep Threads
# Threads: 42
| 碼 | 含義 |
|---|---|
| D | 不可中斷睡眠 (通常為 I/O) |
| R | 執行中/可執行 (在佇列中) |
| S | 可中斷睡眠 (等待事件/訊號) |
| T | 已停止 (收到 SIGSTOP 等) |
| Z | 殭屍進程 (父進程未 wait) |
| < | 高優先序 (nice < 0) |
| N | 低優先序 (nice > 0) |
| l | 多執行緒 (CLONE_THREAD) |
| + | 前景進程組 |
善用上述工具,即可快速定位高執行緒進程、發現執行緒洩漏或死鎖疑點。