当进程超过特定年龄(已用时间)时,PsList / PsKill需要批处理文件帮助

时间:2010-07-22 21:17:54

标签: batch-file kill tasklist

我想请求一些帮助来创建一个批处理文件,以便在Windows服务器上运行,该服务器将监视有时会被“卡住”并在应该被杀死后留下来的进程。

具体来说,我可以在PsList命令的Elapsed Time列中看到进程的“age” http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx

Name                Pid Pri Thd  Hnd   Priv        CPU Time    Elapsed Time
FMSCore            4908   8 146  892 750720     0:01:46.221     4:02:15.907
FMSCore            4780   8 144  943 853060     0:00:42.510     4:02:15.348
FMSCore            3532   8 146  878 553784     0:01:30.262     2:04:56.969
FMSCore            5384   8 147  753  45484     0:00:03.198     0:05:11.267
FMSCore            9548   8 133  608  17408     0:00:00.592     0:00:34.298

下一步,我只想杀死超过4小时的进程。所以我相信我们需要解析我的PsList命令的结果,提取最后一列,解析几个小时,如果我们发现它“足够老”,我们解析它的PID并杀死它。

如果我们谈论bash或其他一些脚本语言,我想我可以解决它,但对于批处理脚本,我不知道。

建议?

(注意:如果需要,我愿意运行自动脚本或其他东西)

2 个答案:

答案 0 :(得分:1)

setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
FOR /F "tokens=2,10* skip=8 delims=: " %%A IN ('pslist') DO (
    if %%B GEQ 4 echo should kill pid %%A, elapsedhrs=%%B
)

请注意

  • skip = 8是过滤掉pslist版权和版本信息,可能是版本特定的
  • 无法处理文件名中包含空格的exe文件!
  • 这也会列出像smss,winlogon,svchost等系统进程,你不应该杀掉这些(因此,不要将其作为系统运行,如果以提升的管理员身份运行也可能会出现问题)

如果按CPU时间过滤是可以接受的,可以使用简单的内置命令:tasklist /FI "CPUTIME ge 04:00:00"

使用Windows Scripting Host或Powershell解决此问题可能更好(使用WMI列出进程,这样您将获得实际对象而不必处理字符串)

答案 1 :(得分:1)

所以我实际上自己想出了这个 - 必须使用AutoIt和一个额外的过滤器来查看每个进程的命令行参数,然后查看每个进程的已用时间,然后查找旧进程。

这是完整的帖子:

http://zeroasterisk.com/2010/07/23/adobe-connect-fmscore-process-killer/

我们设置Connect以在2小时后使FMSCore进程失效,但如果有人仍然连接到录音,它将保留旧的僵尸FMSCore进程,直到该人断开连接。

经常发生这种情况不起作用 - 而且似乎没有垃圾收集来清理旧的FMSCore。

所以我们创建了一个简单的AutoIt脚本,可以编译成一个有效的EXE,但它有一些依赖...

以下依赖项/命令必须全部到位:

  • C:\ Windows \ System32下\ pv.exe
  • C:\ Windows \ System32下\ pslist.exe
  • C:\ Windows \ System32下\ pskill.exe

工作原理

  • 该脚本使用pv.exe查找所有FMS Core进程,这些进程的命令行参数包含“flvplayerapp”(仅适用于录制的课程)
  • 表示每个返回的流程ID
  • 它使用pslist列出包含流程年龄的详细信息
  • 它使用正则表达式匹配找到“它正在运行的小时”
  • 如果超过5小时(可配置参数),则使用pskill来终止进程。

所以我们在每小时计划的任务上设置它,它为我们处理垃圾收集。

http://zeroasterisk.com/blog/wp-content/uploads/2010/07/fmscore-killer-source.au3_.txt