サービスホストプロセス (svchost.exe) とは何ですか? なぜそんなにたくさん実行されているのですか?

サービスホストプロセス (svchost.exe) は、DLL ファイルからサービスをロードするためのシェルです。サービスはグループに編成されており、各グループはサービスホストプロセスの異なるインスタンス内で実行されます。通常、svchost.exe のインスタンスは多数実行されており、Windows が正しく動作するためには多数のサービスが必要です。

タスクマネージャーを閲覧したことがあるなら、なぜサービスホストプロセスがそんなにたくさん実行されているのか疑問に思ったことがあるかもしれません。それらを強制終了することはできず、確実に自分で起動したわけでもありません。では、それらは何でしょうか?

サービスホストプロセスとは何ですか?

Microsoft による回答は次のとおりです。

Svchost.exe は、動的リンクライブラリから実行されるサービスの汎用ホストプロセス名です。

しかし、これはあまり役に立ちません。しばらく前、Microsoft は Windows の機能の多くを、EXE ファイルから実行される内部 Windows サービスに依存するものから、代わりに DLL ファイルを使用するものに変更し始めました。プログラミングの観点からすると、これによりコードの再利用性が高まり、最新の状態を維持しやすくなります。問題は、実行可能ファイルと同じ方法で Windows から DLL ファイルを直接起動できないことです。代わりに、実行可能ファイルからロードされるシェルを使用して、これらの DLL サービスをホストします。そして、サービスホストプロセス (svchost.exe) が生まれました。

なぜサービスホストプロセスがそんなにたくさん実行されているのですか?

コントロールパネルの [サービス] セクションを一度でも見たことがあるなら、Windows には多数のサービスが必要であることに気づいたでしょう。すべてのサービスが 1 つのサービスホストプロセスで実行された場合、1 つのサービスの障害によって Windows 全体 がダウンする可能性があります。代わりに、それらは分離されます。

サービスはすべて多少関連のある論理グループに編成され、各グループをホストするために 1 つのサービスホストインスタンスが作成されます。たとえば、1 つのサービスホストプロセスは、ファイアウォールに関連する 3 つのサービスを実行します。別のサービスホストプロセスは、ユーザーインターフェイスに関連するすべてのサービスを実行する可能性があります。たとえば、下の画像では、1 つのサービスホストプロセスがネットワークに関連する複数のサービスを実行し、別のサービスがリモートプロシージャコールに関連するサービスを実行していることがわかります。

この情報をすべて使って何かできることはありますか?

正直に言うと、あまりありません。PC のリソースがはるかに限られており、オペレーティングシステムがそれほど洗練されていなかった Windows XP (およびそれ以前のバージョン) の時代には、Windows が不要なサービスを実行しないようにすることがよく推奨されていました。最近では、サービスを無効にすることはもう推奨されていません。最近の PC はメモリと高性能プロセッサを搭載している傾向があります。Windows サービスが最新のバージョン (および実行されるサービス) で処理される方法が合理化されているという事実を考慮すると、必要ないと考えるサービスを排除しても、実際にはそれほど大きな影響はありません。

ただし、サービスホストの特定のインスタンス (または関連するサービス) が、継続的な過剰な CPU または RAM の使用など、問題を引き起こしていることに気づいた場合は、関連する特定のサービスを確認できます。これにより、少なくともトラブルシューティングを開始する場所のアイデアが得られる可能性があります。サービスホストの特定のインスタンスでどのサービスがホストされているかを正確に確認するには、いくつかの方法があります。タスクマネージャー内または Process Explorer という優れたサードパーティアプリを使用して、確認できます。

タスクマネージャーで関連サービスを確認する

Windows 10 または Windows 11 を使用している場合、プロセスはタスクマネージャーの [プロセス] タブに完全な名前で表示されます。プロセスが複数のサービスのホストとして機能する場合、プロセスを展開するだけでそれらのサービスを確認できます。これにより、サービスホストプロセスの各インスタンスにどのサービスが属しているかを簡単に特定できます。

個々のサービスを右クリックして、サービスを停止したり、「サービス」コントロールパネルアプリで表示したり、サービスに関する情報をオンラインで検索したりできます。

Windows 7 を使用している場合、少し異なります。Windows 7 のタスクマネージャーはプロセスを同じ方法でグループ化せず、通常のプロセス名も表示しませんでした。実行中の「svchost.exe」のすべてのインスタンスのみが表示されました。「svchost.exe」の特定のインスタンスに関連するサービスを判断するには、少し調べる必要がありました。

Windows 7 のタスクマネージャーの [プロセス] タブで、特定の「svchost.exe」プロセスを右クリックし、「サービスに移動」オプションを選択します。

これにより、「サービス」タブに切り替わり、その「svchost.exe」プロセスで実行されているサービスがすべて選択されます。

次に、「説明」列に各サービスの完全な名前が表示されるので、実行したくない場合や、問題の原因をトラブルシューティングする場合は、サービスを無効にすることができます。

Process Explorer を使用して関連サービスを確認する

Microsoft はまた、Sysinternals ラインナップの一部として、プロセスを操作するための優れた高度なツールを提供しています。Process Explorer をダウンロードして実行するだけです。ポータブルアプリなので、インストールする必要はありません。Process Explorer は、あらゆる種類の高度な機能を提供しています。Process Explorer を理解するためのガイドを読んで、詳細を学ぶことを強くお勧めします。

ただし、ここでは、Process Explorer が「svchost.exe」の各インスタンスで関連するサービスをグループ化します。それらはファイル名でリストされていますが、完全な名前も「説明」列に表示されます。「svchost.exe」プロセスのいずれかにマウスポインターを合わせると、そのプロセスに関連するすべてのサービスを含むポップアップが表示され、現在実行されていないサービスも表示されます。

サービスホストプロセスはウイルスですか?

プロセス自体は公式の Windows コンポーネントです。ウイルスが実際のサービスホストを独自の実行可能ファイルに置き換えた可能性はありますが、非常にまれです。確認したい場合は、プロセスの基になるファイルの場所を確認できます。タスクマネージャーで、任意のサービスホストプロセスを右クリックし、「ファイルの場所を開く」オプションを選択します。

ファイルが Windows\System32 フォルダーに格納されている場合、ウイルスに対処していないとほぼ確信できます。

それでも安心感が欲しい場合は、お気に入りのウイルススキャナーを使用してウイルスをスキャンできます。安全策に越したことはありません!