Windows 處理程序詳解:svchost、Runtime Broker、系統中斷是什麼
工作管理員裡那些看起來很嚇人的 Windows 處理程序,大多是 Windows 本身的正常組成部分,System、系統中斷、服務主機、Runtime Broker、用戶端伺服器執行階段處理程序這些各有各的工作,其中某一個 CPU 使用率高,通常代表它底下有事在做,例如某個驅動程式、某項服務或一次更新。先弄清楚是什麼工作,再決定要不要結束,因為這裡面好幾個處理程序沒辦法安全結束,剩下的結束了也會自己回來。
下面逐一說明常見的名稱是什麼、正版檔案在哪裡、為什麼會忙以及怎麼查。路徑和檔案描述取自一台目前的 Windows 11,在自己的電腦上,可以在工作管理員裡右鍵按一下某一列,選擇「開啟檔案位置」來對照。
一覽
| 工作管理員裡的名稱 | 檔案 | 它是什麼 | 能結束嗎 |
|---|---|---|---|
| System | C:\Windows\System32\ntoskrnl.exe(「NT Kernel & System」) |
Windows 核心,處理程序 ID 為 4 | 不能 |
| 系統中斷(System interrupts) | 無 | 處理硬體中斷所花的時間 | 不是能結束的處理程序 |
| 記憶體壓縮(Memory Compression) | 無 | 留在記憶體裡的壓縮記憶體分頁 | 不能 |
| 服務主機:…(Service Host) | C:\Windows\System32\svchost.exe |
裝著一個或多個 Windows 服務的容器 | 不能,應該去找裡面的服務 |
| Runtime Broker | C:\Windows\System32\RuntimeBroker.exe |
替 Microsoft Store 應用程式管理權限的代理 | 可以,記憶體使用量高時 Microsoft 也建議這麼做 |
| Windows 檔案總管(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 的時候,上面不能執行任何執行緒,所以中斷時間一多,就可能表現成聲音爆音或畫面卡頓。只要硬體在用,總會有一些中斷時間,電腦閒置時這個數字一直很高,就要懷疑某個驅動程式或裝置了。
要找出是哪一個,可以在系統管理員命令提示字元裡錄一段追蹤。WPR 命令參考寫了 -start 和 -stop 的用法,內建的 GeneralProfile 包含 DPC 和中斷事件:
wpr -start GeneralProfile
wpr -stop C:\Temp\interrupts.etl
先執行第一行,在系統中斷偏高的時候等一會兒,再執行第二行,目標資料夾必須已經存在。用 Windows Performance Analyzer 開啟這個檔案,看 DPC/ISR 圖表,其中 Module 欄會寫出那個忙碌常式所在的驅動程式檔案。不想裝工具的話,還有個更簡單的辦法,把 USB 裝置和擴充基座一個個拔下來,同時盯著這個數字。
記憶體壓縮會把不常用的記憶體分頁以壓縮的形式留在記憶體裡,而不是寫進分頁檔。Microsoft 在 Windows 10 推出壓縮存放區時解釋過,這個存放區恰恰是在為其他程式釋放記憶體的時候變大,所以看起來會很大。數字大是其他程式帶來記憶體壓力的結果,而不是原因,真正佔用記憶體的是誰,可以看 Windows 記憶體使用量高。
服務主機(svchost.exe):找出裡面的服務
Microsoft 的服務主機文章把 svchost.exe 描述成一個共用服務處理程序,從 DLL 檔案載入服務。從 Windows 10 1703 版開始,記憶體超過 3.5 GB 的電腦會讓大多數服務各自跑在獨立的服務主機處理程序裡,所以工作管理員裡會有幾十個,每一列也會標出它裝的服務,例如「服務主機: Windows Update」。也有一些服務仍然合在一起,例如 Base Filtering Engine 和 Windows 防火牆。
所以「svchost CPU 高」沒有統一答案,忙的其實是某個服務,有三種辦法把它找出來:
- 在工作管理員的「處理程序」頁面裡展開那個忙碌的服務主機列,裡面的服務就列在它下面。
- 右鍵按一下這一列,選擇「移至詳細資料」取得它的 PID,再開啟「服務」頁面(Windows 10 裡是一個索引標籤),這裡列出了每個服務以及執行它的 PID。
- 在命令提示字元裡用 tasklist,
/svc會列出每個處理程序裡的服務:
tasklist /svc /fi "IMAGENAME eq svchost.exe"
tasklist /svc /fi "PID eq 1234"
把 1234 換成工作管理員裡看到的 PID。接下來處理的是服務,而不是主機,Windows Update 正在收尾一次安裝,或者 wsappx 正在部署一個 Store 應用程式,各有各的解法。結束一個服務主機,會一下子停掉裡面所有服務,而讓服務工作的那個源頭並不會因此停下。
Runtime Broker、Windows 檔案總管和桌面視窗管理員
Runtime Broker(RuntimeBroker.exe)跑在目前的工作階段裡,依照 Microsoft Runtime Broker 文章的說法,它負責管理 Microsoft Store 應用程式在這台電腦上的權限,平時只用幾 MB 記憶體。Microsoft 自己給的門檻是,如果它佔用的記憶體超過 15%,多半是某個應用程式出了問題,建議的做法是結束 Runtime Broker 工作,然後重新啟動電腦。
Windows 檔案總管(explorer.exe,直接放在 C:\Windows 裡)不只是檔案總管的視窗,工作列、開始功能表和桌面也都是它畫的。如果它當掉或者螢幕變黑,Microsoft 的黑色畫面疑難排解指南說可以按 Ctrl + Shift + Esc 開啟工作管理員,右鍵按一下「Windows 檔案總管」選擇「重新啟動」,如果清單裡沒有它,就用「檔案 › 執行新工作」,輸入 explorer.exe。
桌面視窗管理員(dwm.exe)把所有視窗合成為螢幕上的那一幅畫面。Microsoft 的 DWM 概觀講了視窗先畫到螢幕外的表面、再由 DWM 算繪到顯示器上的過程,它的工作量跟著螢幕上的內容走。不要結束它,該查哪些地方可以看桌面視窗管理員 GPU 使用率高。
csrss、wininit、winlogon 和 taskhostw
用戶端伺服器執行階段處理程序(csrss.exe),用 Microsoft 偵錯說明裡的話說,是控制 Windows 環境底層的使用者模式處理程序,從 Windows 10 起它是受保護的處理程序。每個工作階段一個,所以看到兩個或更多是正常的,它的 CPU 應該一直接近零,沒什麼可調的,也沒有理由結束它。
wininit.exe(檔案描述「Windows 啟動應用程式」)和 winlogon.exe(「Windows 登入應用程式」)負責啟動和登入。Microsoft 的 Winlogon 頁面說 Winlogon 會為視窗站建立桌面、實作逾時操作,還會註冊安全注意序列,也就是按下後進入安全性畫面的 Ctrl + Alt + Delete。這兩個處理程序幾乎一直都是閒置的,別去動它們。
Windows 工作的主機處理程序(taskhostw.exe)替 Windows 執行工作,Microsoft 沒有為它單獨寫過說明頁面。如果它一直很忙,可以在工作排程器裡(工作排程器程式庫 › Microsoft › Windows)看哪些工作正在執行,讓它們跑完,而不是去結束主機。如果 taskhostw.exe 不在 C:\Windows\System32 裡,那是另一回事,下面會講。
忙是有原因的:Defender、更新、搜尋和 Store 應用程式
下面這四個通常是在做正事,做完就會自己停,每一個都有單獨的完整指南:
- 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 搜尋索引器 CPU 使用率高。 - wsappx 是負責 Store 應用程式部署和授權的服務主機,見 wsappx CPU 使用率高。
辨識冒充的系統處理程序
惡意軟體有時會借用系統處理程序的名稱,名稱說明不了什麼,能說明問題的是位置和簽章。
- 在工作管理員裡右鍵按一下這個處理程序,選擇「開啟檔案位置」。
svchost.exe、csrss.exe、RuntimeBroker.exe或taskhostw.exe如果是從使用者資料夾、AppData、ProgramData或Temp裡執行的,就不是 Windows 的檔案,也要留意scvhost.exe這種只差一個字母的拼法。 - 右鍵按一下檔案 › 內容 › 詳細資料,正版檔案會顯示 Microsoft Corporation,以及上面表格裡的那段描述。
- 檢查簽章。大多數 Windows 檔案是透過 Windows 目錄(catalog)簽署的,簽章不在檔案本身裡,所以它們的內容裡沒有「數位簽章」索引標籤,沒有這個索引標籤並不是危險訊號。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 防毒 (離線掃描)」會重新啟動電腦,在 Windows 載入之前就開始掃描,頑強的惡意軟體更難藏身,結果會出現在「保護歷程記錄」裡。可疑檔案還在執行時不要手動去刪,也絕對不要因為名稱看起來奇怪就去刪 C:\Windows\System32 裡的檔案。
Mole 能做什麼
Mole 的「狀態」頁面按所屬應用程式把處理程序分組,每組的 CPU 和記憶體加總在一起,重複出現的輔助處理程序就合成了一列。在某一列的選單裡選「為什麼在執行?」,會顯示它的執行檔路徑,如果是服務主機,還會按忙碌程度列出它承載的 Windows 服務;「在檔案總管中顯示」會開啟檔案所在的資料夾,方便做上面說的位置檢查。對於 Windows 服務、從 Windows 資料夾執行的程式以及 System 處理程序本身,Mole 不提供「結束」或「強制結束」,而是把這些列標成「系統程序」。正如說明頁面裡說的,系統處理程序和跟其他應用程式共用的處理程序都要保留。
Mole 不會改動驅動程式、服務或 Defender 的設定,也不偵測惡意軟體。一般應用程式造成的 CPU 使用率高,可以看 Windows CPU 使用率高。
常見問題
svchost.exe 為什麼佔用這麼多 CPU?
服務主機只是裝著服務,忙的是其中某一個。在工作管理員裡展開這一列,或者執行 tasklist /svc 找出是哪個服務,再去處理這個服務,例如 Windows Update 或某個 Store 應用程式的安裝。
系統中斷是什麼,能停用嗎?
它是 Windows 處理硬體中斷以及隨後延遲工作所花的時間,不是程式,所以沒有什麼可停用的。一直很高代表某個驅動程式或裝置有問題,可以更新或回復驅動程式,或者錄一段追蹤,看是哪個驅動程式模組在忙。
Runtime Broker 是什麼,能結束嗎?
它負責管理 Microsoft Store 應用程式的權限。Microsoft 的說法是,如果它佔用的記憶體超過 15%,可以在工作管理員裡結束這個工作,然後重新啟動電腦。
怎麼判斷一個 Windows 處理程序是不是病毒?
看檔案在哪裡、是誰簽署的,正版核心處理程序從 C:\Windows 或 C:\Windows\System32 執行,帶有效的 Microsoft 簽章,很多是目錄簽章。位置或簽章不對,就跑一次 Microsoft Defender 離線掃描。