进程与线程
Windows 进程与线程的查看、管理及性能分析,涵盖命令行工具和 PowerShell。
基本概念
| 概念 | 说明 |
|---|---|
| 进程(Process) | 程序的运行实例,拥有独立的虚拟地址空间和资源 |
| 线程(Thread) | 进程内的执行单元,共享进程资源 |
| PID | 进程唯一标识符 |
| 句柄(Handle) | 对内核对象的引用,如文件、互斥体、事件 |
| 优先级 | 调度器分配 CPU 时间的权重 |
查看进程
tasklist
tasklist :: 列出所有进程
tasklist /fi "imagename eq nginx.exe" :: 按名称过滤
tasklist /fi "pid eq 1234" :: 按 PID 过滤
tasklist /fi "memusage gt 100000" :: 内存 > 100MB
tasklist /v :: 详细信息(含窗口标题)
tasklist /svc :: 显示各进程托管的服务
tasklist /m kernel32.dll :: 列出加载指定 DLL 的进程PowerShell
Get-Process # 列出所有进程
Get-Process -Name "nginx" # 按名称
Get-Process -Id 1234 # 按 PID
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 # CPU 最高前 10
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 # 内存最高前 10
# 查看进程启动命令行(需管理员)
Get-WmiObject Win32_Process | Select-Object Name, ProcessId, CommandLine
# 筛选内存 > 500MB
Get-Process | Where-Object {$_.WorkingSet64 -gt 500MB}终止进程
taskkill /pid 1234 :: 正常终止
taskkill /pid 1234 /f :: 强制终止
taskkill /im notepad.exe /f :: 按名称强制终止
taskkill /im notepad.exe /f /t :: 同时终止子进程树Stop-Process -Id 1234 -Force
Stop-Process -Name "notepad" -Force
Get-Process -Name "chrome" | Stop-Process -Force # 终止所有 chrome进程优先级
start /low notepad.exe
start /belownormal notepad.exe
start /normal notepad.exe
start /abovenormal notepad.exe
start /high notepad.exe
start /realtime notepad.exe :: 慎用,可能导致系统无响应$proc = Get-Process -Name "myapp"
$proc.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::High
# 枚举值:Idle, BelowNormal, Normal, AboveNormal, High, RealTimeCPU 亲和性(绑核)
# 位掩码:核0=1,核1=2,核0+1=3,以此类推
$proc = Get-Process -Name "myapp"
$proc.ProcessorAffinity = 0x3 # 绑定到核 0 和核 1start /affinity 3 myapp.exe :: 启动时绑核(十六进制掩码)性能监控
实时工具
taskmgr :: 任务管理器(GUI)
resmon :: 资源监视器(更详细)
perfmon :: 性能监视器(可录制)PowerShell 性能数据
# 内存使用情况
$os = Get-WmiObject Win32_OperatingSystem
$free = [math]::Round($os.FreePhysicalMemory / 1MB, 2)
$total = [math]::Round($os.TotalVisibleMemorySize / 1MB, 2)
Write-Host "已用: $($total - $free) GB / 总计: $total GB"
# 读取性能计数器
Get-Counter "\Processor(_Total)\% Processor Time"
Get-Counter "\Memory\Available MBytes"
Get-Counter "\Process(chrome)\% Processor Time"
# 持续采样
Get-Counter "\Processor(_Total)\% Processor Time" -SampleInterval 2 -MaxSamples 10父子进程关系
$procs = Get-WmiObject Win32_Process
$procs | Select-Object Name, ProcessId, ParentProcessId |
Sort-Object ParentProcessId | Format-Table -AutoSize
# 查找指定进程的父进程
$child = $procs | Where-Object ProcessId -eq 1234
$parent = $procs | Where-Object ProcessId -eq $child.ParentProcessId
$parent | Select-Object Name, ProcessId转储与调试
:: 生成进程内存转储(Sysinternals ProcDump,需管理员)
procdump -ma 1234 C:\dumps\myapp.dmp
procdump -ma -e myapp.exe C:\dumps\ :: 崩溃时自动转储任务管理器方式:详细信息 → 右键进程 → 创建转储文件
常用 Sysinternals 工具
| 工具 | 说明 |
|---|---|
Process Explorer | 任务管理器增强版,显示 DLL 树、句柄 |
Process Monitor | 实时监控文件、注册表、网络、进程活动 |
ProcDump | 进程转储,支持 CPU/异常触发 |
Handle | 列出进程持有的句柄(排查文件占用) |
Listdlls | 列出进程加载的 DLL |
Autoruns | 枚举所有自启动项 |
相关文档
- 管理工具 — taskmgr、resmon、perfmon 入口
- 事件与日志 — 崩溃与系统日志
- 服务与任务 — Windows 服务管理
- 常用命令 — 常用命令速查
- PowerShell — PowerShell 详解