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