2015-05-14 822 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