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

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

我想要请求一些帮助来创建一个批处理文件,在 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)

相关内容