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命令?
謝謝。
Forivin,我知道SVCHOST是一個容器的過程。但是,我使用公司筆記本電腦,並且此問題特定於某些IT策略。它只有當我有Dota與Firefox和Flashplayer一起運行時纔會出現。 無論如何,殺死流程本身沒有問題。我只是想讓這個過程自動化,這樣我就不必每次都自己改變遊戲標籤。 –
「這個問題特定於某些IT策略」是什麼意思?特別是在企業筆記本電腦上,我絕不會殺死一個svchost進程。只是因爲它看起來沒有什麼不幸發生,並不意味着這是真的。從理論上講,您可能會導致依靠特定服務的進程破壞硬盤上的數據,並導致備份和安全機制失敗......只需檢查svchost進程託管的是哪些服務,跟蹤哪個服務負責並修復永久發佈而不是定期查殺svchosts。 – Forivin