svchost.exe と System Idle Process
○Svchost.exe
DLLファイル(プログラムをまとめたもの、ライブラリ)を実行するためのホストプログラム。
DLLファイルはEXEファイルとは違って単体で使うものではなく、他の様々なEXEファイルに使われるものである。
よってDLLファイルを単体で起動することはできない。
そのため、このDLLファイルをサービスとして使う時に「svchost.exe」をホスト(基底)として
DLLファイルをバックグラウンドで実行している。
でもプロセスの一覧ではDLLファイル本体の名前は表示されず、「svchost.exe」と表示されているだけ。
もしsvchost.exeを消したいのであれば、該当するサービスを終了させるのが最も良い方法。
「svchost.exe」自体はWindows OSのファイルである。
コマンドプロンプトでtasklist /svc /fi "imagename eq svchost.exe"を実行すると、svchost.exeがどんなサービスを動かしているのか確認できる。
これをタスクマネージャから確認できれば便利だし誤解もないのにねぇ・・・
以下出力例:
C:\Users\Username\>tasklist /svc /fi "imagename eq svchost.exe" イメージ名 PID サービス ========================= ======== ============================================ svchost.exe 940 DcomLaunch, PlugPlay svchost.exe 1016 RpcSs svchost.exe 1064 WinDefend svchost.exe 1160 Audiosrv, Dhcp, Eventlog, lmhosts, WPCSvc, wscsvc svchost.exe 1196 AudioEndpointBuilder, EMDMgmt, hidserv, Netman, PcaSvc, SysMain, TabletInputService, TrkWks, UxSms, WdiSystemHost, Wlansvc, WPDBusEnum, wudfsvc svchost.exe 1208 AeLookupSvc, BITS, Browser, CertPropSvc, EapHost, IKEEXT, iphlpsvc, LanmanServer, MMCSS, ProfSvc, RasMan, Schedule, seclogon, SENS, SessionEnv, ShellHWDetection, Themes, Winmgmt, wuauserv svchost.exe 1368 gpsvc svchost.exe 1448 EventSystem, fdPHost, FDResPub, LanmanWorkstation, netprofm, nsi, SSDPSRV, SstpSvc, upnphost, W32Time, wcncsvc, WebClient svchost.exe 1572 CryptSvc, Dnscache, KtmRm, NlaSvc, TapiSrv, TermService svchost.exe 480 BFE, DPS, MpsSvc svchost.exe 2248 PolicyAgent svchost.exe 2312 stisvc svchost.exe 2580 WerSvc
これを見るとほとんどがセキュリティ関連かネットワーク関連のサービスであり、安易にこれらのサービスを停止するのはよくない。
○System Idle Process
簡単に言っちゃえば、これは特殊なタスクでWindowsの機能の一部であり、
CPUに「お前にやる仕事はないからちょっと休め(Idle状態になれ)」という命令(HLT)を送るもの。
System Idle ProcessのCPU利用率が高い=CPUが暇を持て余している
System Idle ProcessのCPU利用率が低い=CPUに負荷がかかっている
ということ。
端的にいえば(System Idle ProcessのCPU利用率=CPUのIdle状態率)
このようにタスクとして動作させることでWindows自体がCPUのIdle状態率を把握できる。
だから、100%からSystem Idle ProcessのCPU使用率(Idle状態率)を引くと、
真のCPU使用率となる。
(実際に、100からこのプロセスのCPU使用率を引くとCPUタブにあるCPU使用率とほぼ一致するはず)
もちろんこのタスクは常に最低優先度で実行しているので、
他のタスクが入ってくればそちらが優先される。
逆に、何も実行するタスクが無くなった時にSystem Idle ProcessタスクでHLT命令がCPUに送られる。
また、CPUに何も命令を送らず空ループさせるよりも、
こうしてHLT命令をひたすら送り続けた方がCPUの消費電力を抑えられるらしい。
わかりやすく書こうとしたら言葉のループになって逆に読みにくくなってしまった罠。
○更新
09/11/29 あるタグの閉じ忘れで大変なことになっていたので何気に修正。
かなり致命的なミスorz