什麼是服務宿主進程(svchost.exe),為什麼運行這麼多?

什麼是服務宿主進程(svchost.exe),為什麼運行這麼多?

如果您曾經看過任務管理器,您可能想知道為什麼有這麼多服務主機進程在運行。你不能殺死他們,當然你也沒有開始他們。那麼它們是什麼?

服務主機進程用作從 DLL 文件加載服務的包裝器。服務被組織成相關的組,每個組在服務的主機進程的一個單獨實例中運行。因此,一個實例中的問題不會影響其他實例。此過程是 Windows 的重要組成部分,無法停止運行。 

本文是我們正在進行的系列文章的一部分,解釋了任務管理器中的各種進程,例如 dwm.exe、ctfmon.exe、mDNSResponder.exe、conhost.exe、rundll32.exe、Adobe_Updater.exe 等等。不知道這些服務是什麼?最好開始閱讀!

什麼是服務宿主進程?

根據微軟的說法,這是答案:

Svchost.exe 是從動態鏈接庫啟動的服務的通用主機進程名稱。

但這對我們幫助不大。前段時間,微軟開始改變 Windows 的大部分功能,依靠內部 Windows 服務(從 EXE 文件運行)來使用 DLL 文件。從編程的角度來看,這使得代碼更易於重用,並且可能更容易保持更新。問題是您不能以與可執行文件相同的方式直接從 Windows 運行 DLL 文件。相反,從可執行文件加載的包裝器用於託管這些 DLL 服務。於是,Service Host 進程(svchost.exe)誕生了。

為什麼有這麼多服務主機進程在運行?

如果您曾經查看過控制面板的“服務”部分,您可能已經註意到 Windows 需要很多服務。如果每個單獨的服務都在單個服務主機進程中運行,則一個服務中的故障可能會導致整個 Windows 癱瘓。相反,它們是分開的。

服務被組織成一些相關的邏輯組,然後創建一個單獨的服務主機實例來容納每個組。例如,一個 Service Host 進程啟動三個與防火牆相關的服務。另一個Service Host進程可以啟動所有與用戶界面相關的服務,以此類推。例如,在下圖中,您可以看到一個 Service Host 進程啟動了幾個相關的網絡服務,而另一個啟動了與遠程過程調用相關的服務。

我應該如何處理所有這些信息?

說實話,不多。在 Windows XP(和以前的版本)時代,當 PC 資源更加有限並且操作系統沒有那麼精細調整時,通常建議停止 Windows 運行不必要的服務。我們現在不再建議禁用服務。現代 PC 往往裝有內存和強大的處理器。此外,在現代版本中處理 Windows 服務的方式(以及運行哪些服務)已得到簡化,並且消除您認為不需要的服務不再重要。

但是,如果您注意到服務主機或其關聯服務的特定實例正在導致問題,例如持續過度使用 CPU 或 RAM,您可能需要檢查所涉及的特定服務。這至少可以讓您了解從哪裡開始進行故障排除。有幾種方法可以準確找出特定服務主機實例上託管的服務。您可以在任務管理器或名為 Process Explorer 的出色第三方應用程序中檢查所有內容。

在任務管理器中查看相關服務

如果您使用的是 Windows 8 或 10,則進程會以其全名顯示在任務管理器的“進程”選項卡中。如果一個進程託管多個服務,您只需擴展該進程即可查看這些服務。這使得很容易確定哪些服務屬於服務主機進程的每個實例。

您可以右鍵單擊任何單個服務以停止該服務,在“服務控制面板”應用程序中查看它,甚至可以在 Web 上搜索有關該服務的信息。

如果您使用的是 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 文件夾中,那麼您可以確定您沒有處理病毒。

但是,如果您仍然想要更加安心,您可以隨時使用您首選的防病毒掃描程序來掃描病毒。神救人,人自救!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *