Linux中线程是轻量级进程,可通过ps -T、top -H、/proc/PID/task/目录及htop查看线程状态与资源占用,注意TID与PID的区别及工具的线程视图启用方式。

在 Linux 中,线程是轻量级进程(LWP),内核以任务(task)为单位调度,每个线程在 /proc 文件系统中都有独立的条目。要查看进程内各线程的运行状态,核心思路是:先定位目标进程,再深入其线程视图。
ps -T 查看指定进程的所有线程
这是最直接的方式。ps -T 会显示线程 ID(TID)、线程名(SPID)、状态(STAT)等信息。常用组合:
-
ps -T -p <PID>:只查某进程下的所有线程(含主线程) -
ps -eLf | grep <process_name>:全局查线程,-L启用线程视图,-f显示完整格式,-e列出所有进程/线程 - 关键列说明:TID 是线程真实 ID(即 LWP ID),SPID 在部分版本中与 TID 相同,STAT 中 R 表示运行中、S 表示睡眠、Z 表示僵尸线程(极少见,通常为进程级僵尸)
top -H 查看实时线程占用(按 CPU 或内存排序)
top -H 启动后默认以线程模式运行,每行代表一个线程。可配合交互命令提升效率:
- 按 H 键可在进程/线程视图间切换(已启用 -H 时默认为线程)
- 按 P 按 CPU 使用率降序,快速识别高负载线程
- 按 M 按内存使用降序,辅助排查内存泄漏线索
- 顶部显示的 %CPU 和 %MEM 是单个线程的占比,不是整个进程
/proc/<PID>/task/ 目录手动探查线程细节
每个线程在 /proc/<PID>/task/<TID>/ 下有独立子目录,适合深度诊断:
-
ls /proc/<PID>/task/:列出该进程所有线程的 TID(即目录名) -
cat /proc/<PID>/task/<TID>/stat:查看线程状态快照,第3字段是运行状态(R/S/D/T/Z 等),第14、15字段是用户/系统时间(单位:jiffies) -
cat /proc/<PID>/task/<TID>/status | grep -E '^(Name|Tgid|Pid|State)':快速获取线程名、所属进程 TGID、自身 PID(TID)、当前状态
htop(需安装)—— 更友好的交互式线程视图
相比 top,htop 对线程支持更直观:
- 启动后按 H 切换线程模式,主线程与子线程自动缩进分组(依赖 htop 配置中的 “Show custom thread names”)
- 可鼠标点击列头排序,支持搜索(F3)、过滤(F4)
- 右侧显示线程树状结构(需开启 Tree view),清晰反映父子关系
- 注意:需确保 htop 编译时启用了线程支持(多数发行版预装版本已支持)
不复杂但容易忽略的是:Linux 中线程和进程共享同一 PID 命名空间,主线程 PID == 进程 PID,其余线程的 TID ≠ PID;而 ps 默认只显示进程,必须加 -T 或 -L 才会展开线程维度。









