进程与线程

返回 Windows

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, RealTime

CPU 亲和性(绑核)

# 位掩码:核0=1,核1=2,核0+1=3,以此类推
$proc = Get-Process -Name "myapp"
$proc.ProcessorAffinity = 0x3   # 绑定到核 0 和核 1
start /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枚举所有自启动项

相关文档