我想要请求一些帮助来创建一个批处理文件,在 Windows 服务器上运行,它将监视有时会“卡住”并在应该被终止后徘徊的进程。
具体来说,我可以在 PsList 命令的“已用时间”列中看到进程的“年龄” 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 或其他脚本语言,我想我可以弄清楚,但对于批处理脚本,我不知道。
有什么建议?
(注:如果需要的话,我愿意运行自动脚本或其他东西)
答案1
在这种情况下,您可能需要 PowerShell。批处理文件中的日期和时间操作有点困难(例如,您甚至无法可靠地获取当前日期/时间),比较任意数据类型也是如此。
在 PowerShell 中这很简单:
Get-Process | where { $_.StartTime -lt (Get-Date).AddHours(-4) } | Stop-Process
预计到达时间:经过进一步的思考,这在批处理文件中可能很容易实现,我将在今天晚些时候研究它,看看是否能让它发挥作用。
答案2
由于你对 bash 比较熟悉,请尝试以下操作:
pslist| mawk“$1 =='FMSCore'&&int(substr($8,1,1))> = 4 {打印'pskill'$2}”| cmd
您可以从这里下载 mawk: http://www.klabaster.com/freeware.htm#mawk
(此版本的 awk 非常适合 win32)