2015-05-14 820 views
0

我遇到了一些svchost有時會失控並導致系統不穩定的問題。大多數情況下,我只是手動殺死它,但如果開始使用太多內存,我決定每次都自動編寫一個AHK腳本。Autohotkey無法殺死進程

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 
#Warn ; Enable warnings to assist with detecting common errors. 
#SingleInstance force 


;-------------------------------------------------------------- 
; Variables 
;-------------------------------------------------------------- 
minMemMB = 200 
minCPUPercentage = 50 

Loop 
{ 
    for process in ComObjGet("winmgmts:").ExecQuery("Select IDProcess, PercentProcessorTime, WorkingSet from Win32_PerfFormattedData_PerfProc_Process where Name like '%svchost%'") 

    PID = % process.IDProcess 
    CPU = % process.PercentProcessorTime 
    MEM = % Round(process.WorkingSet/1000000) 
    FormatTime, TIME 

    if (CPU > minCPUPercentage or MEM > minMemMB) 
     { 
      Process, Close, %PID% 
      sleep, 2000 
      if ErrorLevel = %PID% 
       FileAppend, 
       (
        Killed, %PID% , %CPU% , %MEM%, %TIME% `r`n 
       ), log.csv 
      else 
       FileAppend, 
       (
        Failed, %PID% , %CPU% , %MEM%, %TIME% `r`n 
       ), log.csv 
     } 

} 

我的代碼在識別svchost何時超出應該使用的內存量時工作正常。但它無法殺死它。我的日誌充滿了這樣的條目:

Failed 624 0 1036  11:15 PM Wednesday May 13 2015 
Failed 7408 68 65 12:36 AM Thursday May 14 2015 
Failed 7408 92 121 12:37 AM Thursday May 14 2015 
Failed 7408 80 142 12:39 AM Thursday May 14 2015 
Failed 7408 55 176 12:39 AM Thursday May 14 2015 
Failed 7408 99 149 12:46 AM Thursday May 14 2015 
Failed 7408 80 150 12:53 AM Thursday May 14 2015 

有人可以幫助我嗎? 我應該用run + taskkill來代替嗎? 或者是否有我可以使用的WMI命令?

謝謝。

回答

0

殺svchost.exe(服務主機進程)可能是一個壞主意。 svchost的一個實例通常會處理多個服務,如果你殺了它,它下面運行的所有服務都將停止。
您應該試着找出哪些服務導致系統變得不穩定,然後找出該服務屬於哪個程序,然後更新或卸載該程序......或者在最壞的情況下停止服務。
您也可以禁用該服務,以防止Windows自動啓動。我想推薦process explorer from sysinternals。只需將鼠標懸停在svchost進程上,工具提示就會顯示當前託管哪些服務。

要禁用或停止服務去這裏:Win+R -> services.msc -> Enter

+0

Forivin,我知道SVCHOST是一個容器的過程。但是,我使用公司筆記本電腦,並且此問題特定於某些IT策略。它只有當我有Dota與Firefox和Flashplayer一起運行時纔會出現。 無論如何,殺死流程本身沒有問題。我只是想讓這個過程自動化,這樣我就不必每次都自己改變遊戲標籤。 –

+0

「這個問題特定於某些IT策略」是什麼意思?特別是在企業筆記本電腦上,我絕不會殺死一個svchost進程。只是因爲它看起來沒有什麼不幸發生,並不意味着這是真的。從理論上講,您可能會導致依靠特定服務的進程破壞硬盤上的數據,並導致備份和安全機制失敗......只需檢查svchost進程託管的是哪些服務,跟蹤哪個服務負責並修復永久發佈而不是定期查殺svchosts。 – Forivin