前两天电脑经常开机后CPU占用率就90%多,卡的玩儿不了游戏,最后确定是其中的一个svchost.exe搞的鬼,看来跟本地服务有关,没办法,又得忙活一下了。因为我一直对Windows中的服务的概念理解的不是十分透彻,可能是由于我也是个DOS时代的人吧,没有对这些有更多的研究,所以以下我所分析的原因和解决方法不一定正确,也不一定适用于所有计算机,应用时请慎重。
首先,svchost.exe偶尔资源占用高是正常的。如果持续偏高,而且已经影响正常操作的话,那应该注意了(相信你不注意也不行)。首先你要确认那个进程名是svchost.exe,如果是看起来很像的话,比如svohost.exe这类的话,那基本上可以说你是中了病毒了。
简单介绍一下XP下怎样确定你的svchost.exe是不是病毒。首先打开CMD,然后输入wmic回车,稍等片刻,等提示符变为“wmic:root\cli>”后,输入“process list”回车,不含引号。稍后会列出当前所有进程,包括执行路径。svchost只有在“C:\WINDOWS\System32\”下才有,如果有别的路径下的,那一定是病毒了。至于怎样杀毒这里就先不说了。
网上有说把这个占用CPU的大户结束掉的说法,我是不同意的。你可以结束一下试试,你会发现CPU马上空闲了,不过你仔细看看,防火墙打不开,看电影玩儿游戏没声音,等等。很正常,你把它关了,就等于把它加载的服务全关了,其中就有Windows Firewall和Windows Audio服务。
svchost.exe从名称上看,应该能看出来,意思是“service host”,即“服务宿主”,也就是作为服务的进程是通过这个svchost.exe运行的,就好像通过rundll32.exe运行dll动态链接库一样。windows2000一般有两个,XP系统最少有4个,一般只有一个占用比较多的内存和CPU,这个svchost.exe的执行命令是“C:\WINDOWS\System32\svchost.exe -k netsvcs”,这个svchost.exe是被更多的服务共享的进程,也就是说他一个进程控制许多服务。具体执行了什么服务我们可以这样看一下,打开任务管理器,切换到进程选项卡,单击菜单中的查看-选择列,钩选PID项,找到最耗费内存和CPU的svchost.exe,记下它的PID,然后打开CMD,输入“tasklist /svc”回车,找到跟那个PID对应的进程,我们就可以从服务列看到他加载的服务了,应该不少吧?
既然我们已经知道原因了,那我们来解决一下它占用CPU太高的问题。思路也很简单,既然是加载的服务太多了,那关几个不就成了。说的是这么简单,关,也要看清楚再关,有用的当然不能管了。有三种途径可以查看更改启动服务。
1、计算机管理。打开运行窗口,输入“services.msc”回车,将打开本地服务窗口,一个一个的对照着描述,看看是不是有用的,觉得没用的就关闭,描述里说的都比较清楚,实在不懂的就留着,一般来说不是微软和硬件提供商的就完全可以关闭。另外微软的服务也可以关闭,比如DHCP服务是提供动态分配IP地址的服务,一般的终端是用不上的,就可以关闭。关闭的方法是双击该服务,选择禁用确定即可。这种方法比较简单也比较安全。
2、系统配置实用程序。打开运行窗口,输入“msconfig”回车,将打开系统配置实用程序窗口,选择服务选项卡,把要关闭的服务前面的对钩勾掉确定即可。这种方法最安全,即使关错了,重启后还可以在msconfig中选择正常启动来恢复。第一、二种方法可以同时对照使用。
3、注册表。打开运行窗口,输入“regedit”回车,将打开注册表编辑器,打开“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost”项,svchost.exe加载的服务都在这里,不用的就删掉,我不推荐这种方法,仅供熟悉注册表的高手参考。
一般来说,大部分的微软服务都会被保留,杀毒软件的实时监控服务也要留下,如果你是笔记本或者品牌机的话,硬件提供商提供的特殊服务最好也留下,既然是服务嘛,当然是要享受的。把其他提供商的关闭掉,再重头看看微软的服务,通过计算机管理中本地服务的描述来了解一下,把自己不需要的关闭,也可以在高手的指点下进行。完成后重启使设置生效,如果顺利的话svchost.exe的内存和CPU占用都会下降。