svchost.exe占了100%CPU

(2007-3-21 10:38:19)

最近,我的电脑总是闹毛病,现象是刚启动,或者刚从休眠状态醒过来的时候,svchost.exe进程要占用100%的CPU,狂跑五分钟,同时占用100M左右的内存空间,不知道它在干什么,看着也不像病毒。这个毛病先在ThinkPad上出现,然后就在我的宝贝台式机上出现了。ThinkPad每天在公司可以自动更新,所以过了半个多月,更新了几次补丁之后,这个毛病就没有了。台式机在家里,更新不勤,所以这个毛病一直存在。所以,我严重怀疑这个毛病是微软的某个补丁里带的BUG,丫的不公布出来,在后续的某个补丁里又偷偷摸摸地修好了。Google了一下,找了些svchost的背景知识:

svchost.exe是Windows XP系统的一个核心进程。svchost.exe不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有svchost.exe的存在。一般在Windows 2000中svchost.exe进程的数目为2个,而在Windows XP中svchost.exe进程的数目就上升到了4个及4个以上。所以看到系统的进程列表中有几个svchost.exe不用那幺担心。svchost.exe到底是做什幺用的呢?首先我们要了解一点那就是Windows系统的中的进程分为:独立进程和共享进程这两种。由于Windows系统中的服务越来越多,为了节约有限的系统资源微软把很多的系统服务做成了共享模式。那svchost.exe在这中间是担任怎样一个角色呢?svchost.exe的工作就是作为这些服务的宿主,即由svchost.exe来启动这些服务。svchost.exe只是负责为这些服务提供启动的条件,其自身并不能实现任何服务的功能,也不能为用户提供任何服务。svchost.exe通过为这些系统服务调用动态链接库(DLL)的方式来启动系统服务。svchost.exe的键值是在“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost”,每个键值表示一个独立的svchost.exe组。微软还为我们提供了一种察看系统正在运行在svchost.exe列表中的服务的方法。以Windows XP为例:在“运行”中输入:cmd,然后在命令行模式中输入:tasklist /svc。系统即列出svchost的服务列表。如果使用的是Windows 2000系统则把前面的“tasklist /svc”命令替换为:“tlist -s”即可。

按照上述资料,把电脑检查了一番,没发现什么异常的东西。又见到有贴子说,他老人家把ShareAccess服务关掉就好了,我也试了试,没用。再说,关了这个服务,防火墙就没了,那还不成了肉鸡。又见到有贴子说,他把KB894391这个补丁给删了就没事了,Google了一下,原来这个补丁也是给另一个补丁擦屁股的。但我的系统里没这东东啊,让我去哪儿删!

正郁闷着呢,发现右下角System Tray里冒出了小气球,提示我又有新的更新下载完毕了。得得得,那就安装呗。点了一下,KB833407就安上去了,重启一下机器,咦~~~svchost.exe咋就变乖了呢??!!再也不在进程列表里冒头了!问题解决了!!唉,微软啊,您老做的东西啥时候能让我们这些程序员搞明白呢!