Windowsのプロセス解説:svchost、Runtime Brokerなど
タスク マネージャーで不安になるWindowsのプロセスの多くは、Windowsの正常な一部です。System、システム割り込み、サービス ホスト、Runtime Broker、クライアント サーバー ランタイム プロセスなどはそれぞれ役割を持っていて、どれかのCPU使用率が高いときは、たいていその下でドライバー、サービス、更新といった何かの処理が動いています。終了する前にその処理が何かを確かめてください。これらのプロセスのいくつかは安全に終了できず、残りは終了しても勝手に戻ってくるからです。
以下では、よく見る名前がそれぞれ何なのか、本物のファイルがどこにあるのか、なぜ忙しくなるのか、どう確認するのかを説明します。場所とファイルの説明は現行のWindows 11のものです。自分のPCでは、タスク マネージャーで行を右クリックして「ファイルの場所を開く」を選ぶと比較できます。
一覧
| タスク マネージャーでの名前 | ファイル | 何をするものか | 終了してよいか |
|---|---|---|---|
| System | C:\Windows\System32\ntoskrnl.exe(「NT Kernel & System」) |
Windowsカーネル、プロセスIDは4 | いいえ |
| システム割り込み(System interrupts) | なし | ハードウェア割り込みの処理に使われた時間 | 終了できるプロセスではない |
| メモリ圧縮(Memory Compression) | なし | RAM内に置かれた圧縮済みメモリページ | いいえ |
| サービス ホスト: …(Service Host) | C:\Windows\System32\svchost.exe |
1つ以上のWindowsサービスを入れる器 | いいえ、中のサービスを探す |
| Runtime Broker | C:\Windows\System32\RuntimeBroker.exe |
Microsoft Storeアプリの権限を仲介する | はい、メモリ使用量が多いときはMicrosoftも勧めている |
| エクスプローラー(Windows Explorer) | C:\Windows\explorer.exe |
タスクバー、スタート、デスクトップ、エクスプローラー | 「タスクを終了する」ではなく「再起動」を使う |
| デスクトップ ウィンドウ マネージャー(Desktop Window Manager) | C:\Windows\System32\dwm.exe |
すべてのウィンドウを画面に描く | いいえ |
| クライアント サーバー ランタイム プロセス(Client Server Runtime Process) | C:\Windows\System32\csrss.exe |
Windowsのユーザーモードの中核部分 | いいえ |
| Windows スタートアップ アプリケーション / Windows ログオン アプリケーション | C:\Windows\System32にあるwininit.exe / winlogon.exe |
起動とサインイン | いいえ |
| Windows タスクのホスト プロセス(Host Process for Windows Tasks) | C:\Windows\System32\taskhostw.exe |
Windowsのタスクを実行する | 触らない |
System、システム割り込み、メモリ圧縮
SystemはWindowsカーネルです。プロセスIDは常に4で、ファイルのntoskrnl.exeは「プロパティ › 詳細」で自分を「NT Kernel & System」と説明しています。ここでCPU使用率が高いということは、カーネルレベルの処理が忙しいことはわかっても、どの部分かまではわかりません。まずドライバーと保留中の更新から調べます。Microsoftのドライバー更新ガイドによれば、ドライバーの更新はWindows Updateから入手するのが最善で、最近のドライバーで悪化した場合は「デバイス マネージャー › そのデバイスのプロパティ › ドライバー › ドライバーを元に戻す」で戻せます(管理者権限が必要)。
システム割り込みはプログラムではなく、ファイルもありません。プロセッサがハードウェアに応答するのに使った時間です。MicrosoftのCPU分析ガイドが仕組みを説明しています。ネットワーク カードなどのデバイスが割り込みを発生させると、Windowsは割り込みサービス ルーチン(ISR)を実行し、ISRは通常、残りの処理を遅延プロシージャ呼び出し(DPC)として予約します。プロセッサがDPCやISRを実行している間、そのプロセッサではスレッドが動けません。割り込み時間が多いと音のプチプチやカクつきとして現れるのはそのためです。ハードウェアを使っている限り割り込み時間は常にある程度ありますが、アイドル状態のPCでずっと高い値が続くなら、ドライバーかデバイスが疑わしいです。
どれなのかを突き止めるには、管理者のコマンド プロンプトでトレースを記録します。WPRコマンド リファレンスに-startと-stopが載っていて、組み込みのGeneralProfileにはDPCと割り込みのイベントが含まれます:
wpr -start GeneralProfile
wpr -stop C:\Temp\interrupts.etl
1行目を実行し、システム割り込みが高い間しばらく待ってから2行目を実行します。保存先のフォルダーは事前に存在している必要があります。ファイルをWindows Performance Analyzerで開いてDPC/ISRのグラフを見ると、Module列に忙しいルーチンを含むドライバー ファイルの名前が出ます。ツールを使わない簡単な方法もあります。USBデバイスやドックを1つずつ外しながら、数値を見てください。
メモリ圧縮は、あまり使われないメモリページをページ ファイルに書き出す代わりに、圧縮した形でRAMに残します。MicrosoftはWindows 10で圧縮ストアを導入したとき、このストアはまさにほかのプログラムのためにメモリを空けているときに大きくなると説明しており、大きく見えるのはそのためです。値が大きいのはほかのプログラムによるメモリ不足の結果であって、原因ではありません。実際に何がメモリを使っているかはWindowsのメモリ使用率が高いを参照してください。
サービス ホスト(svchost.exe):中のサービスを見つける
Microsoftのサービス ホストの記事は、svchost.exeをDLLファイルからサービスを読み込む共有サービス プロセスと説明しています。Windows 10バージョン1703以降、RAMが3.5 GBを超えるPCではほとんどのサービスがそれぞれ専用のサービス ホスト プロセスで動くため、タスク マネージャーには何十個も表示され、各行には「サービス ホスト: Windows Update」のように中のサービス名が付きます。Windows ファイアウォールとBase Filtering Engineのように、まとめられたままのサービスもあります。
つまり「svchostのCPU使用率が高い」に単一の答えはなく、忙しいのはサービスです。特定する方法は3つあります:
- タスク マネージャーの「プロセス」画面で、忙しいサービス ホストの行を展開します。中のサービスがその下に一覧表示されます。
- 行を右クリックして「詳細に移動」を選んでPIDを確認し、「サービス」ページ(Windows 10ではタブ)を開きます。すべてのサービスが、それを実行しているPIDとともに表示されます。
- コマンド プロンプトでtasklistを使います。
/svcで各プロセス内のサービスが表示されます:
tasklist /svc /fi "IMAGENAME eq svchost.exe"
tasklist /svc /fi "PID eq 1234"
1234はタスク マネージャーで確認したPIDに置き換えてください。そのうえで、ホストではなくサービスに対処します。インストールを仕上げているWindows Updateと、Storeアプリを展開しているwsappxとでは、それぞれ別の対処法があります。サービス ホストを終了すると、中のサービスがすべて一度に止まり、しかもサービスに仕事をさせた側は止まりません。
Runtime Broker、エクスプローラー、デスクトップ ウィンドウ マネージャー
Runtime Broker(RuntimeBroker.exe)はユーザーのセッション内で動き、MicrosoftのRuntime Brokerの記事によれば、Microsoft StoreのアプリのPC上での権限を管理しています。通常は数MBしか使いません。Microsoft自身の目安では、メモリの15%以上を使っているならアプリの動作がおかしい可能性が高く、Runtime Brokerのタスクを終了してPCを再起動するのが推奨の対処です。
エクスプローラー(explorer.exe、C:\Windows直下)はファイル エクスプローラーのウィンドウだけではなく、タスクバー、スタート、デスクトップも描いています。応答しなくなったり画面が真っ暗になったりした場合、Microsoftの黒い画面のトラブルシューティングでは、Ctrl + Shift + Escでタスク マネージャーを開き、「エクスプローラー」を右クリックして「再起動」を選ぶよう案内しています。一覧にない場合は「ファイル › 新しいタスクの実行」からexplorer.exeと入力します。
デスクトップ ウィンドウ マネージャー(dwm.exe)は、すべてのウィンドウを合成して画面上の1枚の画像にします。MicrosoftのDWMの概要は、ウィンドウがオフスクリーンのサーフェスに描画され、DWMがそれをディスプレイに描き出す流れを説明しています。仕事量は画面の内容に左右されます。終了はせず、何を確認すべきかはデスクトップ ウィンドウ マネージャーのGPU使用率が高いを参照してください。
csrss、wininit、winlogon、taskhostw
クライアント サーバー ランタイム プロセス(csrss.exe)は、Microsoftのデバッグに関する説明の言葉を借りれば、Windows環境の基盤となる層を制御するユーザーモード プロセスで、Windows 10以降は保護されたプロセスです。セッションごとに1つあるので、2つ以上あっても正常です。CPU使用率はほぼゼロのはずで、調整する項目も終了する理由もありません。
wininit.exe(ファイルの説明は「Windows スタートアップ アプリケーション」)とwinlogon.exe(「Windows ログオン アプリケーション」)は起動とサインインを担当します。MicrosoftのWinlogonのページによれば、Winlogonはウィンドウ ステーション用のデスクトップを作成してタイムアウト処理を実装し、セキュリティ画面を出すときに押すCtrl + Alt + Delete、つまりセキュア アテンション シーケンスを登録します。どちらもほぼ常にアイドル状態のはずです。そのままにしておいてください。
Windows タスクのホスト プロセス(taskhostw.exe)はWindowsのタスクを実行しますが、Microsoftはこのプロセス専用のページを公開していません。忙しい状態が続く場合は、タスク スケジューラ(タスク スケジューラ ライブラリ › Microsoft › Windows)でどのタスクが動いているかを確認し、ホストを終了せずに終わるのを待ちます。C:\Windows\System32以外にあるtaskhostw.exeは別の話で、後述します。
忙しいのには理由がある:Defender、更新、検索、Storeアプリ
この4つはたいてい本当に仕事をしていて、終われば自然に収まります。それぞれに詳しいガイドがあります:
- Antimalware Service Executable(
MsMpEng.exe、C:\ProgramData\Microsoft\Windows Defender\Platform\<version>\の下)はMicrosoft Defenderのスキャンです。Antimalware Service ExecutableのCPU使用率が高いを参照してください。 - Windows Modules Installer Worker(
TiWorker.exe、C:\Windows\WinSxSの下のサービシング スタック フォルダー内)は、Windows Modules Installerサービス(C:\Windows\servicing\TrustedInstaller.exe)のために更新処理を行います。Windows Modules Installer WorkerのCPU使用率が高いを参照してください。 - Microsoft Windows Search Indexer(
C:\Windows\System32\SearchIndexer.exe)は検索インデックスを作成します。Windows Search IndexerのCPU使用率が高いを参照してください。 - wsappxはStoreアプリの展開とライセンスを担うサービス ホストです。wsappxのCPU使用率が高いを参照してください。
偽のシステム プロセスを見分ける
マルウェアはシステム プロセスの名前を借りることがあります。名前は何の証明にもならず、証拠になるのは場所と署名です。
- タスク マネージャーでプロセスを右クリックし、「ファイルの場所を開く」を選びます。
svchost.exe、csrss.exe、RuntimeBroker.exe、taskhostw.exeがユーザー フォルダー、AppData、ProgramData、Tempから動いていれば、それはWindowsのファイルではありません。scvhost.exeのような紛らわしい綴りにも注意してください。 - ファイルを右クリック › プロパティ › 詳細。本物のファイルにはMicrosoft Corporationと、上の表にある説明が表示されます。
- 署名を確認します。Windowsのファイルの多くはファイル内ではなくWindowsのカタログを通じて署名されているため、プロパティに「デジタル署名」タブがありません。タブがないこと自体は危険のサインではありません。Get-AuthenticodeSignatureはカタログ署名も読めるので、見つけたパスを指定します:
Get-AuthenticodeSignature C:\Windows\System32\svchost.exe | Format-List Status, SignatureType, SignerCertificate
本物のファイルならValidと表示され、種類はたいていCatalog、証明書はMicrosoft Windowsのものです。フォルダー全体を確認するなら、MicrosoftのSigcheckのsigcheck -u -e c:\windows\system32で署名のないファイルが一覧表示されます。Microsoftは、署名されていないファイルはすべて調べるよう勧めています。
少しでもおかしいと思ったらスキャンしてください。MicrosoftのWindows セキュリティのガイドでは、「スキャンのオプション」は「ウイルスと脅威の防止」の下にあります。「Microsoft Defender ウイルス対策 (オフライン スキャン)」はPCを再起動してWindowsが読み込まれる前にスキャンするので、しつこいマルウェアも隠れにくく、結果は「保護の履歴」に表示されます。怪しいファイルが動いている間に手作業で削除しないでください。また、名前が変に見えたからといってC:\Windows\System32のファイルを削除することは絶対に避けてください。
Moleでできること
Moleの「ステータス」ページは、プロセスを所有するアプリごとにまとめ、グループごとにCPUとメモリを合計するので、繰り返し現れるヘルパー プロセスも1行にまとまります。行のメニューから「なぜ実行中?」を選ぶと実行ファイルのパスが表示され、サービス ホストの行ではホストしているWindowsサービスが忙しい順に表示されます。「エクスプローラーで表示」はファイルのフォルダーを開くので、上で説明した場所の確認に使えます。Windowsサービス、Windowsフォルダーから動いているもの、Systemプロセス自体には、Moleは「終了」も「強制終了」も出さず、その行を「システム」と表示します。ヘルプページにあるとおり、システム プロセスとほかのアプリと共有しているプロセスは残しておいてください。
Moleはドライバー、サービス、Defenderの設定を変更せず、マルウェアの検出もしません。普通のアプリによるCPU使用率の高さについてはWindowsのCPU使用率が高いを参照してください。
よくある質問
svchost.exeがCPUを大量に使うのはなぜですか?
サービス ホストはサービスを入れているだけで、忙しいのはそのうちの1つです。タスク マネージャーで行を展開するかtasklist /svcを実行してサービスを特定し、Windows UpdateやStoreアプリのインストールなど、そのサービスに対処してください。
システム割り込みとは何ですか?無効にできますか?
Windowsがハードウェア割り込みとその遅延処理に使っている時間で、プログラムではないので無効にするものはありません。ずっと高いならドライバーかデバイスが原因です。ドライバーを更新するか元に戻すか、トレースを記録してどのドライバー モジュールが忙しいかを確認してください。
Runtime Brokerとは何ですか?終了しても安全ですか?
Microsoft Storeアプリの権限を管理しています。Microsoftによれば、メモリの15%以上を使っている場合はタスク マネージャーでタスクを終了し、PCを再起動してかまいません。
Windowsのプロセスがウイルスかどうかはどう見分けますか?
ファイルの場所と署名者を確認します。本物の中核プロセスはC:\WindowsかC:\Windows\System32から動き、有効なMicrosoftの署名(多くはカタログ署名)を持っています。場所か署名がおかしければ、Microsoft Defenderのオフライン スキャンを実行してください。