先告诉你svhost.exe的背景,让我们慢慢分析把:首先我们看看微软的非官方解释: “svchost.exe is a generic host process name for services that run from dynamic-link libraries”。翻译过来就是:“svchost.exe是加载自动态链接库的各种服务的通用托管进程名”。
然后打开电脑的任务管理器查看系统进程的时候,总是会看到数个svhost.exe进程项,但你没有印象开启过他们啊,这些进程数目还时多时少,种种特征让人有理由怀疑这些进程是木马或者病毒。那svhost.exe到底是“善”是“恶”?
其实,讲实在话,看了官方解释只会让脑袋里的问号增多,没几个人是计算机专家。但我们先把svchost.exe的来龙去脉分析一下就会雾散云开了。早些时候(具体时间没考证),微软把Windows内部服务的各种功能程序从.exe文件转移到.dll文件,从编程角度来讲,这增加了程序的重用性,但也带来了一个问题:在windows中动态链接库文件(.dll)是无法直接启动的。因此,动态链接库文件只能从可执行文件(.exe)中加载,所以便有了svchost.exe。
那么为什么会有多个svhost.exe同时存在?
其实Windows操作系统的正常运行需要多个服务的支持,如果把所有服务都加载在一个svhost.exe进程,万一其中一个服务出现错误,那整个操作系统就会“崩盘”,所以必须把他们分开。
所以,操作系统把各种服务会按逻辑进行分组。一个svhost.exe进程管一个组。例如,一个svhost.exe加载了3个与防火墙相关的服务,那这3个服务属于一个逻辑分组,他们都被加载在一个svhost.exe里,而这个svhost.exe进程又与加载了别的服务的svhost.exe同时存在。
那么怎么处理svhost.exe问题?
其先,可以通过禁止或关闭一些svhost.exe来削减不必要的服务,另外,如果发现某个svhost.exe占用了出奇多的CPU资源,可以重启该svhost.exe进程以释放被占用资源。但是如果你想查看某个svhost.exe下加载了什么服务,有两种办法:
第一,使用命令行,这个最简单。开始菜单>>运行>>输入cmd>>输入tasklist /svc
第二,使用Process Explorer(下图)系统进程查看工具,把鼠标悬停在svhost.exe上即可在弹出窗口中查看它所加载的进程,如果要停掉某个服务,双击该服务所在的svhost.exe进程,在Services标签下的窗口内即可进行关闭服务操作。Process Explorer可从微软网站下载,免费。