本文是我对自己上一篇转载的博客 《Figuring out why my SVCHOST.EXE is at 100% CPU without complicated tools in Windows 7》 的翻译。本人翻译的原则是力求通顺自然,因此很多地方并没有严格按照原文的词句来,而是争取用更符合我们语言习惯的方式表达类似的意思。
原文:Figuring out why my SVCHOST.EXE is at 100% CPU without complicated tools in Windows 7
译者:hello_mike_ || www.cnblogs.com/hellojianqun/ || [email protected] ; 翻译日期:2015.09.26
=====================================华丽的分割线===================================
SvcHost.exe进程是Windows很多后台服务的宿主。它的全称是“Service Host”。在这个进程下运行着很多个服务。而且有时在任务管理器中你还会看到不只一个SvcHost.exe。
首先要知道的是,任务管理器在这件事情上是不能指望的了。虽然在任务管理器的“服务”标签栏中可以看到正在运行的服务的PID,但是要在其中找出正在发了疯吃你CPU的那个服务,好像也只能靠运气了……
于是你肯定就会想,这些个SvcHost.exe里面到底跑着些怎样的服务啊?又到底是哪个服务把我的CPU飚到了100%啊?
要解决这些问题,方法是有很多的。不过可不要简单地想直接把CPU使用率最高的那个SvcHost.exe进程结束掉就行了,因为这样会把这个SvcHost.exe底下运行着的其它服务也全部结束了的。
真正能用的方法,比如以下这些命令行:
net start
或者
sc query type= service
又或者
tasklist /svc
但如果用这些的话就违背我写这篇博客的初衷了,我要介绍的是一种简单的方法。
究竟是哪个服务崩溃了?
在开始菜单的搜索框中输入“资源监视器”并运行它。
在每一个SvcHost.exe进程前打上勾(或者只是勾选你感兴趣的那几个),然后,切换到“CPU”标签栏。
看到中间那个窗格里面的各个服务名称了没?这个时候你只要点击“CPU”那一列的表头使它们按CPU使用率排列,就马上知道是哪个服务在捣蛋了。你可以直接在这个服务上右键选择“停止服务”或者“重新启动服务”,还可以选择“联机搜索”,它就会自动打开默认浏览器用默认搜索引擎去查找这个服务的相关信息。
上述方法在我编写和调试服务的过程中不只一次地帮了我大忙。资源监视器会是你的好助手的。然而,好多人都不知道有这个东西存在……
你也来试试吧!
=====================================华丽的分割线===================================
以下为译者补充:
以上方法只适用于Vista及以上的操作系统,因此在XP上是不行的。并不是说XP上没有资源管理器所以就不行,而是即使用Process Explorer和Process Hacker这些具有同样功能的第三方软件也无法获取到,所以应该是系统API层面的问题。