我想请求一些帮助来创建一个批处理文件,以便在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或其他一些脚本语言,我想我可以解决它,但对于批处理脚本,我不知道。
建议?
(注意:如果需要,我愿意运行自动脚本或其他东西)
答案 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
)
请注意
如果按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,但它有一些依赖...
以下依赖项/命令必须全部到位:
工作原理
所以我们在每小时计划的任务上设置它,它为我们处理垃圾收集。
http://zeroasterisk.com/blog/wp-content/uploads/2010/07/fmscore-killer-source.au3_.txt