服务讲一讲熟悉又陌生的svchost进程
_本文原题:讲一讲熟悉又陌生的svchost进程
熟悉的陌生朋友:svchost.exe
有时候 , 你可能会打开任务管理器 , 看看里面有什么进程在跑 , 你会发现 , 进程列表中有很多svchost.exe 。
为什么会有如此多的svchost.exe进程呢?这个svchost.exe到底是什么呢?今天就来简单解释解释 。
设计原理和解释
从传统的系统设计角度来看 , 每一个Windows服务都会运行在它所在的进程中 。 这样 , 当你开发和测试你的服务的时候就十分简单方便 。
但是 , 如果你打开Windows的服务管理器(命令行执行services.msc) , 你会发现 , 那里有很多服务 , 其中主要是Windows的服务 , 当然也包含第三方应用开发商开发的服务 。 如果每个服务都对应一个进程的话 , 则系统需要维护非常多的进程 。 对于一个进程来说 , 就算它什么实际的工作也不做 , 系统也需要为它分配各种资源来维护这个进程 。 将每个服务都放到一个进程中的设计方式实际上是一种资源的浪费 , 因为有很大一部分服务仅仅是在某些时间点下被触发执行 。 例如Microsoft Windows电话TAPI服务(Tapisrv) , 它仅仅会在处理和调制解调器(modem)相关的操作时才会被触发运行 。
考虑到性能方面的原因 , 我们将相关的服务编到一个组中 , 在这个组中 , 所有的服务都会运行在一个叫做svchost的共享进程中 。
这意味着 , 如果你发现某一个svchost.exe有些不正常 , 你还是无法知道到底是里面的哪一个服务出了问题 。 在微软的知识库中 , 有一篇专门讲解svchost的文章(how you can dig into each svchost to see which services are running inside it) , 它讲述了如何通过研究svchost进程来查看它承载了哪些服务 。 这还是很有用的 , 因为当svchost进程异常的时候 , 你至少可以缩写问题排查的范围 。
查看svchost中的服务的几种方法
1. 通过任务管理器查看 。
【服务讲一讲熟悉又陌生的svchost进程】
本文插图
2. 执行命令行指令:tasklist /svc /fi “imagename eq svchost.exe”
本文插图
3. 通过Process Explorer工具来查看 。
本文插图
本文插图
本文插图
总结
将多个服务跑在同一个进程中 , 减少了系统资源消耗 , 提升了性能 。 但是 , 这种设计也不可避免地增加了开发和调试服务的难度 。 所以 , 正在开发Windows服务的你 , 还需要再慎重慎重 。
本文插图
- 夏课好微服务系列——分布式核心知识
- 芯智讯中国电信56314台服务器集采:华为鲲鹏、海光斩获大单
- 「政务」山东年底建立全省政务服务“好差评”,实名差评回访率要100%
- 成华普法成华区瀛领禾石律师事务所设立诉讼服务站
- 青白江服务今年四川GDP增速要比全国高2个百分点左右!省政府工作报告来了
- 鼓楼微讯企业送来表扬信,暖心服务助力复产复工
- 工作@河南暂停新冠肺炎健康申报证明办理服务工作
- 科技X菌TV要用上A12X,服务业务再迎利好,瞄准游戏市场?苹果新Apple
- 【省级】山东省残疾人家庭医生签约服务工作首个省级政策文件出台
- 科技X菌瞄准游戏市场?苹果新Apple TV要用上A12X,服务业务再迎利好