Windows 进程详解:svchost、Runtime Broker、系统中断都是什么
任务管理器里那些看着吓人的 Windows 进程,大多是 Windows 自己的正常组成部分,System、系统中断、服务主机、Runtime Broker、客户端服务器运行时进程这些各有各的活,其中某一个 CPU 占用高,通常说明它底下有事在做,比如某个驱动、某项服务或一次更新。先弄清楚是什么活,再决定要不要结束,因为这里面好几个进程没法安全结束,剩下的结束了也会自己回来。
下面逐个说明常见的名字是什么、正版文件在哪、为什么会忙以及怎么查。路径和文件描述取自一台当前的 Windows 11,在自己的电脑上,可以在任务管理器里右键某一行,选择「打开文件所在的位置」来对照。
一览
| 任务管理器里的名字 | 文件 | 它是什么 | 能结束吗 |
|---|---|---|---|
| System | C:\Windows\System32\ntoskrnl.exe(「NT Kernel & System」) |
Windows 内核,进程 ID 为 4 | 不能 |
| 系统中断(System interrupts) | 无 | 处理硬件中断所花的时间 | 不是能结束的进程 |
| 内存压缩(Memory Compression) | 无 | 留在内存里的压缩内存页 | 不能 |
| 服务主机:…(Service Host) | C:\Windows\System32\svchost.exe |
装着一个或多个 Windows 服务的容器 | 不能,应该去找里面的服务 |
| Runtime Broker | C:\Windows\System32\RuntimeBroker.exe |
给 Microsoft Store 应用管权限的代理 | 可以,内存占用高时微软也建议这么做 |
| Windows 资源管理器(Windows Explorer) | C:\Windows\explorer.exe |
任务栏、开始菜单、桌面和文件资源管理器 | 用「重新启动」,不要用「结束任务」 |
| 桌面窗口管理器(Desktop Window Manager) | C:\Windows\System32\dwm.exe |
把每个窗口画到屏幕上 | 不能 |
| 客户端服务器运行时进程(Client Server Runtime Process) | C:\Windows\System32\csrss.exe |
Windows 用户模式的核心部分 | 不能 |
| Windows 启动应用程序 / Windows 登录应用程序 | C:\Windows\System32 下的 wininit.exe / winlogon.exe |
负责启动和登录 | 不能 |
| Windows 任务的主机进程(Host Process for Windows Tasks) | C:\Windows\System32\taskhostw.exe |
运行 Windows 的任务 | 别动它 |
System、系统中断和内存压缩
System 就是 Windows 内核,进程 ID 永远是 4,它的文件 ntoskrnl.exe 在「属性 › 详细信息」里的描述是「NT Kernel & System」。这里 CPU 高只说明内核层面的工作很忙,说明不了是哪一部分,先从驱动和待装的更新查起。微软的驱动更新指南说获取驱动更新最好的途径是 Windows 更新,如果是最近装的驱动让情况变糟,可以在「设备管理器 › 该设备的属性 › 驱动程序 › 回退驱动程序」里撤回(需要管理员权限)。
系统中断不是程序,也没有文件,它是处理器响应硬件所花的时间。微软的 CPU 分析指南讲了其中的机制,网卡这类设备发出一个中断,Windows 运行中断服务例程(ISR),ISR 通常会把剩下的活排成一个延迟过程调用(DPC),处理器在跑 DPC 和 ISR 的时候,上面不能运行任何线程,所以中断时间一多,就可能表现为声音爆音或画面卡顿。只要硬件在用,总会有一些中断时间,电脑闲着时这个数字一直很高,就要怀疑某个驱动或设备了。
要找出是哪一个,可以在管理员命令提示符里录一段跟踪。WPR 命令参考写了 -start 和 -stop 的用法,内置的 GeneralProfile 包含 DPC 和中断事件:
wpr -start GeneralProfile
wpr -stop C:\Temp\interrupts.etl
先运行第一行,在系统中断偏高的时候等一会儿,再运行第二行,目标文件夹必须已经存在。用 Windows Performance Analyzer 打开这个文件,看 DPC/ISR 图表,其中 Module 列会写出那个忙碌例程所在的驱动文件。不想装工具的话,还有个更简单的办法,把 USB 设备和扩展坞一个个拔下来,同时盯着这个数字。
内存压缩会把不常用的内存页以压缩的形式留在内存里,而不是写进页面文件。微软在 Windows 10 里推出压缩存储时解释过,这个存储恰恰是在为其他程序释放内存的时候变大,所以看起来会很大。数字大是其他程序带来内存压力的结果,而不是原因,真正吃内存的是谁,可以看 Windows 内存占用高。
服务主机(svchost.exe):找出里面的服务
微软的服务主机文章把 svchost.exe 描述为一个共享服务进程,从 DLL 文件里加载服务。从 Windows 10 1703 版开始,内存超过 3.5 GB 的电脑会让大多数服务各自跑在单独的服务主机进程里,所以任务管理器里会有几十个,每一行也会标出它装的服务,比如「服务主机: Windows Update」。也有一些服务仍然合在一起,比如 Base Filtering Engine 和 Windows 防火墙。
所以「svchost CPU 高」没有统一答案,忙的其实是某个服务,有三种办法把它找出来:
- 在任务管理器的「进程」页里展开那个忙碌的服务主机行,里面的服务就列在它下面。
- 右键这一行,选择「转到详细信息」拿到它的 PID,再打开「服务」页(Windows 10 里是一个选项卡),这里列出了每个服务以及运行它的 PID。
- 在命令提示符里用 tasklist,
/svc会列出每个进程里的服务:
tasklist /svc /fi "IMAGENAME eq svchost.exe"
tasklist /svc /fi "PID eq 1234"
把 1234 换成任务管理器里看到的 PID。接下来处理的是服务,而不是宿主,Windows 更新在收尾一次安装,或者 wsappx 在部署一个 Store 应用,各有各的解决办法。结束一个服务主机,会一下子停掉里面所有服务,而让服务干活的那个源头并不会因此停下。
Runtime Broker、Windows 资源管理器和桌面窗口管理器
Runtime Broker(RuntimeBroker.exe)跑在当前会话里,按微软 Runtime Broker 文章的说法,它负责管理 Microsoft Store 应用在这台电脑上的权限,平时只用几 MB 内存。微软自己给的门槛是,如果它占用的内存超过 15%,多半是某个应用出了问题,建议的做法是结束 Runtime Broker 任务,然后重启电脑。
Windows 资源管理器(explorer.exe,直接放在 C:\Windows 里)不只是文件资源管理器的窗口,任务栏、开始菜单和桌面也都是它画的。如果它卡住或者屏幕变黑,微软的黑屏排查指南说可以按 Ctrl + Shift + Esc 打开任务管理器,右键「Windows 资源管理器」选择「重新启动」,如果列表里没有它,就用「文件 › 运行新任务」,输入 explorer.exe。
桌面窗口管理器(dwm.exe)把所有窗口合成成屏幕上的那一幅画面。微软的 DWM 概述讲了窗口先画到离屏表面、再由 DWM 渲染到显示器上的过程,它的工作量跟着屏幕上的内容走。不要结束它,该查哪些地方可以看桌面窗口管理器 GPU 占用高。
csrss、wininit、winlogon 和 taskhostw
客户端服务器运行时进程(csrss.exe),用微软调试说明里的话说,是控制 Windows 环境底层的用户模式进程,从 Windows 10 起它是受保护进程。每个会话一个,所以看到两个或更多是正常的,它的 CPU 应该一直接近零,没什么可调的,也没有理由结束它。
wininit.exe(文件描述「Windows 启动应用程序」)和 winlogon.exe(「Windows 登录应用程序」)负责启动和登录。微软的 Winlogon 页面说 Winlogon 会为窗口站创建桌面、实现超时操作,还会注册安全注意序列,也就是按下后进入安全界面的 Ctrl + Alt + Delete。这两个进程几乎一直都是闲着的,别去动它们。
Windows 任务的主机进程(taskhostw.exe)替 Windows 运行任务,微软没有为它单独写过说明页。如果它一直很忙,可以在任务计划程序里(任务计划程序库 › Microsoft › Windows)看哪些任务正在运行,让它们跑完,而不是去结束宿主。如果 taskhostw.exe 不在 C:\Windows\System32 里,那是另一回事,下面会讲。
忙是有原因的:Defender、更新、搜索和 Store 应用
下面这四个通常是在干正事,干完就会自己停,每一个都有单独的完整指南:
- Antimalware Service Executable(
MsMpEng.exe,在C:\ProgramData\Microsoft\Windows Defender\Platform\<version>\下)是 Microsoft Defender 在扫描,见 Antimalware Service Executable CPU 占用高。 - Windows Modules Installer Worker(
TiWorker.exe,在C:\Windows\WinSxS下的某个服务堆栈文件夹里)替 Windows Modules Installer 服务(C:\Windows\servicing\TrustedInstaller.exe)做更新相关的工作,见 Windows Modules Installer Worker CPU 占用高。 - Microsoft Windows Search Indexer(
C:\Windows\System32\SearchIndexer.exe)在建立搜索索引,见 Windows 搜索索引器 CPU 占用高。 - wsappx 是负责 Store 应用部署和许可的服务主机,见 wsappx CPU 占用高。
识别冒充的系统进程
恶意软件有时会借用系统进程的名字,名字说明不了什么,能说明问题的是位置和签名。
- 在任务管理器里右键这个进程,选择「打开文件所在的位置」。
svchost.exe、csrss.exe、RuntimeBroker.exe或taskhostw.exe如果是从用户文件夹、AppData、ProgramData或Temp里运行的,就不是 Windows 的文件,也要留意scvhost.exe这种差一个字母的拼写。 - 右键文件 › 属性 › 详细信息,正版文件会显示 Microsoft Corporation,以及上面表格里的那段描述。
- 检查签名。大多数 Windows 文件是通过 Windows 目录(catalog)签名的,签名不在文件本身里,所以它们的属性里没有「数字签名」选项卡,没有这个选项卡并不是危险信号。Get-AuthenticodeSignature 也能读取目录签名,把它指向刚才找到的路径:
Get-AuthenticodeSignature C:\Windows\System32\svchost.exe | Format-List Status, SignatureType, SignerCertificate
正版文件会显示 Valid,类型通常是 Catalog,证书属于 Microsoft Windows。想检查整个文件夹,可以用微软的 Sigcheck,sigcheck -u -e c:\windows\system32 会列出没有签名的文件,微软的建议是任何没签名的文件都要查一查。
只要有一处看着不对,就扫描一遍。按微软的 Windows 安全中心指南,「扫描选项」在「病毒和威胁防护」下面,选「Microsoft Defender 防病毒(脱机扫描)」会重启电脑,在 Windows 加载之前就开始扫描,顽固的恶意软件更难藏身,结果会出现在「保护历史记录」里。可疑文件还在运行时不要手动去删,也绝对不要因为名字看着奇怪就去删 C:\Windows\System32 里的文件。
Mole 能做什么
Mole 的「状态」页按所属应用把进程分组,每组的 CPU 和内存加在一起,重复出现的辅助进程就合成了一行。在某一行的菜单里选「为什么在运行?」,会显示它的可执行文件路径,如果是服务主机,还会按忙碌程度列出它承载的 Windows 服务;「在文件资源管理器中显示」会打开文件所在的文件夹,方便做上面说的位置检查。对于 Windows 服务、从 Windows 文件夹里运行的程序以及 System 进程本身,Mole 不提供「终止」或「强制退出」,而是把这些行标成「系统进程」。正如帮助页里说的,系统进程和跟其他应用共用的进程都要保留。
Mole 不会改动驱动、服务或 Defender 的设置,也不检测恶意软件。普通应用造成的 CPU 占用高,可以看 Windows CPU 占用高。
常见问题
svchost.exe 为什么占用这么多 CPU?
服务主机只是装着服务,忙的是其中某一个。在任务管理器里展开这一行,或者运行 tasklist /svc 找出是哪个服务,再去处理这个服务,比如 Windows 更新或某个 Store 应用的安装。
系统中断是什么,能禁用吗?
它是 Windows 处理硬件中断以及随后延迟工作所花的时间,不是程序,所以没有什么可禁用的。一直很高说明某个驱动或设备有问题,可以更新或回退驱动,或者录一段跟踪,看是哪个驱动模块在忙。
Runtime Broker 是什么,能结束吗?
它负责管理 Microsoft Store 应用的权限。微软的说法是,如果它占用的内存超过 15%,可以在任务管理器里结束这个任务,然后重启电脑。
怎么判断一个 Windows 进程是不是病毒?
看文件在哪、是谁签的名,正版核心进程从 C:\Windows 或 C:\Windows\System32 运行,带有效的微软签名,很多是目录签名。位置或签名不对,就跑一次 Microsoft Defender 脱机扫描。