Linux / macOS 系统
在 Linux 和 macOS 系统中,我们主要使用 ps、top、htop 和 lsof 等命令来查看进程和线程信息。

ps 命令
ps 是最基本、最常用的进程查看命令,要查看线程,需要结合特定的选项。
核心选项:
-L:显示线程(Lightweight Process, LWP)。-e或-A:显示所有进程。-f或-F:以完整的格式显示信息,包括PPID(父进程ID)、CMD(命令行)等。-m:在进程信息中显示线程信息。--forest:以树状结构显示进程和线程关系。
常用命令组合:
a) 查看指定进程的所有线程
你需要知道目标进程的 ID (PID),可以使用 ps aux | grep [进程名] 来找到 PID。

假设你想查看 PID 为 1234 的进程的线程:
# 显示PID为1234的进程及其所有线程 ps -p 1234 -L -o pid,ppid,lwp,tid,psr,cmd
pid: 进程IDppid: 父进程IDlwp/tid: 线程IDpsr: 线程正在运行在哪个CPU核心上cmd: 启动命令
b) 查看所有进程的所有线程
# 显示所有进程及其线程 ps -eLf
-e: 显示所有进程-L: 显示线程-f: 详细格式
c) 以树状结构查看进程和线程
# 以树状结构显示所有进程,能清晰看到父子关系和线程归属 ps -e --forest -o pid,ppid,cmd
top / htop 命令
top 是一个动态的、交互式的进程查看器。htop 是 top 的一个增强版,界面更友好,操作更直观。

a) 使用 top
默认情况下,top 只显示进程,要查看线程,需要进行交互操作。
- 启动
top:top
- 按
H键:开启或关闭线程视图,开启后,每个线程都会被单独列为一行,其所属的进程会有一个master标识。 - 按
P(大写): 按 CPU 使用率排序。 - 按
M(大写): 按 内存使用率排序。 - 按
q键:退出top。
b) 使用 htop
htop 默认就以树状结构显示进程和线程,体验更好。
- 启动
htop:htop
- 默认界面就会显示进程和其线程,缩进表示线程属于哪个进程。
- 你可以通过
F2或F5等功能键调整显示列和排序方式。 - 按
q键退出。
lsof 命令
lsof (List Open Files) 主要用于列出进程打开的文件,但它也可以用来查看线程。
# 查看PID为1234的进程的所有线程ID
lsof -p 1234 | awk '{print $2}' | sort -u
这个命令会列出进程 1234 打开的所有文件,然后提取出进程 ID(实际上所有线程共享进程的文件描述符,所以这里显示的是进程ID),sort -u 用于去重,这种方法不如 ps -L 直接。
Windows 系统
在 Windows 系统中,我们主要使用任务管理器和命令行工具(如 tasklist 和 wmic)来查看线程。
任务管理器
这是最直观、最常用的图形化工具。
-
打开方式:
- 按
Ctrl + Shift + Esc。 - 在任务栏上右键,选择“任务管理器”。
- 按
Ctrl + Alt + Del,然后选择“任务管理器”。
- 按
-
查看线程:
- 打开任务管理器后,点击“详细信息”标签页。
- 在菜单栏点击“查看” -> “选择列”。
- 在弹出的窗口中,勾选“线程”和“线程数”。
- 现在你就可以看到每个进程的线程数量,要查看具体是哪些线程,可以右键点击某个进程,选择“打开文件位置”(这不一定能直接看到线程)或者更直接的方法是使用下面的命令行工具。
tasklist 命令
tasklist 是一个强大的命令行工具,用于列出当前运行的进程。
核心选项:
/v: 显示详细信息,包括线程数、内存使用等。/m: 列出进程加载的 DLL 文件。/fi: 使用筛选器。/svc: 显示每个进程服务的名称。
常用命令:
a) 查看所有进程及其线程数
tasklist /v
在输出的详细信息中,Threads 列会显示每个进程拥有的线程数量。
b) 查找特定进程的线程
# 查找名为 "chrome.exe" 的进程及其详细信息,包括线程数 tasklist /fi "imagename eq chrome.exe" /v
c) 查看特定进程的线程ID
tasklist 本身不直接列出线程ID,要查看线程ID,我们需要结合其他工具,最常用的是 wmic。
wmic 命令
wmic (Windows Management Instrumentation Command-line) 是一个功能非常强大的命令行工具,可以查询系统底层的详细信息,包括线程。
常用命令:
a) 查看指定进程的所有线程
假设你想查看 PID 为 1234 的进程的所有线程:
wmic process where "processid=1234" call getthreadid
这个命令会直接输出该进程下所有线程的 ID 列表。
b) 查看所有进程的线程ID(会列出所有系统线程)
wmic thread get processid,handle
processid: 线程所属的进程ID。handle: 线程ID。
c) 结合 tasklist 和 wmic
这是一个非常实用的组合,可以先找到进程,再查其线程。
@echo off
set pid=1234
REM 检查PID是否存在
tasklist /fi "PID eq %pid%" /fo table | find "%pid%" > nul
if %errorlevel% neq 0 (
echo 进程 PID %pid% 不存在。
exit /b
)
REM 显示进程信息
echo 正在查看 PID 为 %pid% 的进程线程...
echo ------------------------------------
REM 使用wmic列出线程ID
wmic process where "processid=%pid%" call getthreadid
echo ------------------------------------
echo 完成。
将上述代码保存为 .bat 文件,修改 pid 变量即可使用。
总结与对比
| 操作系统 | 命令/工具 | 主要用途 | 示例 |
|---|---|---|---|
| Linux/macOS | ps |
静态查看进程和线程信息 | ps -p 1234 -L |
top / htop |
动态、交互式查看,可排序 | htop (按 H 切换线程视图) |
|
lsof |
列出进程打开的文件,间接关联线程 | lsof -p 1234 |
|
| Windows | 任务管理器 | 图形化界面,直观查看进程和线程数 | Ctrl + Shift + Esc |
tasklist |
命令行列出进程,可显示线程数 | tasklist /v |
|
wmic |
命令行查询底层信息,可精确获取线程ID | wmic process where "processid=1234" call getthreadid |
选择哪个工具取决于你的使用习惯:
- 快速查看:在 Linux/macOS 下用
htop,在 Windows 下用任务管理器。 - 脚本自动化:在 Linux/macOS 下用
ps,在 Windows 下用tasklist或wmic。 - 深入分析:在 Linux/macOS 下用
ps -Lf配合grep过滤,在 Windows 下用wmic获取精确的线程ID。
