Skip to content

任务管理

任务管理器是 Windows 系统中监控系统性能和管理运行程序的重要工具。本章介绍任务管理器的使用方法和进程管理技巧。

任务管理器概述

打开任务管理器

有多种方式可以打开任务管理器:

text
方式一:快捷键 Ctrl + Shift + Esc
方式二:快捷键 Ctrl + Alt + Delete → 任务管理器
方式三:右键任务栏 → 任务管理器
方式四:Win + R → taskmgr
方式五:开始菜单搜索"任务管理器"
方式六:PowerShell: Start-Process taskmgr

任务管理器视图

任务管理器有两种视图模式:

text
简洁视图:
├── 只显示正在运行的应用程序
└── 点击"详细信息"切换到完整视图

详细视图:
├── 进程选项卡
├── 性能选项卡
├── 应用历史记录选项卡
├── 启动选项卡
├── 用户选项卡
├── 详细信息选项卡
└── 服务选项卡

进程管理

查看进程

powershell
# 使用 PowerShell 查看进程
Get-Process

# 查看特定进程
Get-Process chrome
Get-Process -Name "notepad"

# 查看进程详细信息
Get-Process | Format-List *

# 按内存使用排序
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10

# 按 CPU 使用排序
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10

# 使用 tasklist 命令
tasklist
tasklist /fi "imagename eq chrome.exe"
tasklist /v  # 详细信息

进程信息详解

powershell
# 查看进程的关键属性
Get-Process | Select-Object Name, Id, CPU, WorkingSet, VirtualMemorySize, StartTime

# 属性说明
# Name              - 进程名称
# Id                - 进程 ID(PID)
# CPU               - 累计 CPU 时间(秒)
# WorkingSet        - 物理内存使用量(字节)
# VirtualMemorySize - 虚拟内存大小(字节)
# StartTime         - 进程启动时间
# Threads           - 线程数
# Handles           - 句柄数
# Path              - 程序路径

# 查看进程的线程信息
$process = Get-Process -Name "chrome" | Select-Object -First 1
$process.Threads

# 查看进程加载的模块
$process.Modules

结束进程

powershell
# 使用 PowerShell 结束进程
Stop-Process -Name "notepad"
Stop-Process -Id 1234
Stop-Process -Name "chrome" -Force

# 结束多个进程
Get-Process chrome | Stop-Process -Force

# 使用 taskkill 命令
taskkill /IM notepad.exe
taskkill /PID 1234
taskkill /IM chrome.exe /F  # 强制结束

# 结束进程树(包括子进程)
taskkill /F /IM explorer.exe /T

# 结束无响应的进程
Get-Process | Where-Object { $_.Responding -eq $false } | Stop-Process -Force

启动进程

powershell
# 使用 PowerShell 启动进程
Start-Process notepad
Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe"

# 启动进程并传递参数
Start-Process notepad -ArgumentList "C:\test.txt"

# 以管理员身份运行
Start-Process powershell -Verb RunAs

# 最小化启动
Start-Process notepad -WindowStyle Minimized

# 最大化启动
Start-Process notepad -WindowStyle Maximized

# 等待进程结束
$process = Start-Process notepad -PassThru
$process.WaitForExit()
Write-Host "进程已结束"

# 使用 start 命令
start notepad
start "" "C:\Program Files\Google\Chrome\Application\chrome.exe"

性能监控

CPU 监控

powershell
# 查看 CPU 使用率
Get-Counter -Counter "\Processor(_Total)\% Processor Time"

# 持续监控 CPU
Get-Counter -Counter "\Processor(_Total)\% Processor Time" -Continuous

# 查看每个核心的使用率
Get-Counter -Counter "\Processor(*)\% Processor Time"

# 查看进程 CPU 使用
Get-Process | Sort-Object CPU -Descending | Select-Object Name, CPU -First 10

# 使用 WMI 获取 CPU 信息
Get-CimInstance -ClassName Win32_Processor | 
    Select-Object Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed

内存监控

powershell
# 查看内存使用情况
Get-Counter -Counter "\Memory\Available MBytes"
Get-Counter -Counter "\Memory\% Committed Bytes In Use"

# 查看系统内存信息
$os = Get-CimInstance -ClassName Win32_OperatingSystem
$freeMemory = [math]::Round($os.FreePhysicalMemory / 1MB, 2)
$totalMemory = [math]::Round($os.TotalVisibleMemorySize / 1MB, 2)
$usedMemory = $totalMemory - $freeMemory
$usedPercent = [math]::Round(($usedMemory / $totalMemory) * 100, 2)

Write-Host "总内存: $totalMemory GB"
Write-Host "已用内存: $usedMemory GB ($usedPercent%)"
Write-Host "可用内存: $freeMemory GB"

# 查看进程内存使用
Get-Process | Sort-Object WorkingSet -Descending | 
    Select-Object Name, @{N='Memory(MB)';E={[math]::Round($_.WorkingSet/1MB,2)}} -First 10

# 查看页面文件使用
Get-CimInstance -ClassName Win32_PageFileUsage | 
    Select-Object Name, @{N='Size(GB)';E={[math]::Round($_.AllocatedBaseSize/1024,2)}}, 
                      @{N='Used(GB)';E={[math]::Round($_.CurrentUsage/1024,2)}}

磁盘监控

powershell
# 查看磁盘活动
Get-Counter -Counter "\PhysicalDisk(_Total)\Disk Read Bytes/sec"
Get-Counter -Counter "\PhysicalDisk(_Total)\Disk Write Bytes/sec"
Get-Counter -Counter "\PhysicalDisk(_Total)\% Disk Time"

# 查看磁盘队列
Get-Counter -Counter "\PhysicalDisk(_Total)\Avg. Disk Queue Length"

# 查看磁盘空间
Get-CimInstance -ClassName Win32_LogicalDisk | 
    Select-Object DeviceID, 
                  @{N='Size(GB)';E={[math]::Round($_.Size/1GB,2)}}, 
                  @{N='Free(GB)';E={[math]::Round($_.FreeSpace/1GB,2)}}

网络监控

powershell
# 查看网络流量
Get-Counter -Counter "\Network Interface(*)\Bytes Total/sec"

# 查看网络连接数
Get-Counter -Counter "\TCPv4\Connections Established"

# 查看当前网络连接
Get-NetTCPConnection -State Established | 
    Group-Object OwningProcess | 
    Sort-Object Count -Descending

# 查看进程的网络连接
Get-NetTCPConnection -OwningProcess (Get-Process chrome).Id

启动项管理

查看启动项

powershell
# 通过任务管理器查看
# 任务管理器 → 启动选项卡

# 通过 PowerShell 查看启动项
Get-CimInstance Win32_StartupCommand | 
    Select-Object Name, Command, Location, User

# 查看注册表启动项
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"

# 查看启动文件夹
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
Get-ChildItem "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

管理启动项

powershell
# 禁用启动项(通过注册表)
Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "程序名" -ErrorAction SilentlyContinue

# 添加启动项
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "MyApp" -Value "C:\Path\To\App.exe"

# 创建启动快捷方式
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\MyApp.lnk")
$Shortcut.TargetPath = "C:\Path\To\App.exe"
$Shortcut.Save()

# 删除启动快捷方式
Remove-Item "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\MyApp.lnk" -ErrorAction SilentlyContinue

服务管理

查看服务

powershell
# 查看所有服务
Get-Service

# 查看运行中的服务
Get-Service | Where-Object Status -eq "Running"

# 查看已停止的服务
Get-Service | Where-Object Status -eq "Stopped"

# 查看特定服务
Get-Service -Name "wuauserv"  # Windows Update
Get-Service -Name "Spooler"   # Print Spooler

# 查看服务详细信息
Get-CimInstance -ClassName Win32_Service | 
    Select-Object Name, DisplayName, State, StartMode

# 使用 sc 命令
sc query
sc query wuauserv
sc query type= service state= all

启动和停止服务

powershell
# 启动服务
Start-Service -Name "Spooler"

# 停止服务
Stop-Service -Name "Spooler"

# 重启服务
Restart-Service -Name "Spooler"

# 暂停服务
Suspend-Service -Name "Spooler"

# 恢复服务
Resume-Service -Name "Spooler"

# 强制停止服务
Stop-Service -Name "Spooler" -Force

# 使用 sc 命令
sc start Spooler
sc stop Spooler

配置服务

powershell
# 设置服务启动类型
Set-Service -Name "Spooler" -StartupType Automatic
Set-Service -Name "Spooler" -StartupType Manual
Set-Service -Name "Spooler" -StartupType Disabled

# 查看服务启动类型
Get-Service -Name "Spooler" | Select-Object Name, Status, StartType

# 使用 sc 命令配置
sc config Spooler start= auto    # 自动
sc config Spooler start= demand  # 手动
sc config Spooler start= disabled  # 禁用

# 设置服务显示名称和描述
Set-Service -Name "Spooler" -DisplayName "打印后台处理程序" -Description "管理打印任务"

资源监视器

打开资源监视器

powershell
# 打开资源监视器
resmon

# 通过任务管理器打开
# 任务管理器 → 性能选项卡 → 打开资源监视器

资源监视器功能

资源监视器提供更详细的系统资源监控:

text
CPU 选项卡:
├── 按进程查看 CPU 使用
├── 按服务查看 CPU 使用
├── 关联的句柄
└── 关联的模块

内存 选项卡:
├── 进程内存使用
├── 物理内存分布
└── 硬中断/软中断

磁盘 选项卡:
├── 磁盘活动进程
├── 磁盘活动
└── 磁盘存储

网络 选项卡:
├── 网络活动进程
├── 网络活动
├── TCP 连接
└── 端口监听

进程优先级

查看和设置优先级

powershell
# 查看进程优先级
Get-Process | Select-Object Name, Id, PriorityClass

# 设置进程优先级
$process = Get-Process -Name "notepad"
$process.PriorityClass = "High"

# 优先级级别
# RealTime   - 实时(可能导致系统不稳定)
# High       - 高
# AboveNormal - 高于标准
# Normal     - 标准(默认)
# BelowNormal - 低于标准
# Low        - 低

# 启动进程时设置优先级
Start-Process notepad -PriorityClass "High"

# 使用 wmic 设置优先级
wmic process where name="notepad.exe" call setpriority 128
# 优先级值:64=低, 16384=低于标准, 32=标准, 32768=高于标准, 128=高, 256=实时

进程关联性

powershell
# 查看进程 CPU 关联性
$process = Get-Process -Name "notepad"
$process.ProcessorAffinity

# 设置进程 CPU 关联性
# 关联性是一个位掩码,每个位代表一个 CPU 核心
# 1 = 核心 0, 2 = 核心 1, 4 = 核心 2, 8 = 核心 3
# 3 = 核心 0 和 1, 15 = 核心 0-3

$process.ProcessorAffinity = 3  # 使用核心 0 和 1

# 启动进程时设置关联性
Start-Process notepad
$process = Get-Process notepad | Select-Object -Last 1
$process.ProcessorAffinity = 15

后台进程管理

查看后台应用

powershell
# 查看后台进程
Get-Process | Where-Object { $_.MainWindowTitle -eq "" }

# 查看有窗口的进程
Get-Process | Where-Object { $_.MainWindowTitle -ne "" }

# 查看后台应用设置
# 设置 → 隐私 → 后台应用

管理后台应用

powershell
# 通过注册表禁用后台应用
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications" `
    -Name GlobalUserDisabled -Value 1

# 启用后台应用
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications" `
    -Name GlobalUserDisabled -Value 0

性能日志和警报

创建数据收集器

powershell
# 打开性能监视器
perfmon

# 创建数据收集器集
# 性能监视器 → 数据收集器集 → 用户定义 → 右键 → 新建 → 数据收集器集

# 使用 logman 命令
logman create counter MyCounter -c "\Processor(_Total)\% Processor Time" "\Memory\Available MBytes"

# 启动数据收集
logman start MyCounter

# 停止数据收集
logman stop MyCounter

# 查看数据收集器
logman query

# 删除数据收集器
logman delete MyCounter

小结

本章介绍了 Windows 任务管理的主要内容:

  1. 任务管理器:了解任务管理器的界面和功能
  2. 进程管理:查看、启动和结束进程
  3. 性能监控:监控 CPU、内存、磁盘和网络
  4. 启动项管理:管理开机启动的程序
  5. 服务管理:启动、停止和配置服务
  6. 资源监视器:使用高级监控工具
  7. 进程优先级:调整进程的优先级和 CPU 关联性
  8. 后台进程:管理后台运行的应用

建议:

  • 定期检查系统性能,及时发现异常
  • 合理管理启动项,提高系统启动速度
  • 不要随意结束系统进程
  • 使用资源监视器进行详细诊断
  • 为重要进程设置适当的优先级