我想请求一些帮助,创build一个batch file在Windows服务器上运行,这将监视有时会被“卡住”,应该被杀死之后的stream程。
具体来说,我可以看到PsList命令的Elapsed Time列中进程的“年龄” 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小时的进程。 所以我相信我们需要parsing我的PsList命令的结果,提取最后一列,parsing几个小时,如果我们发现它“足够老”,我们parsing出它的PID并杀死它。
如果我们在讨论bash或者其他一些脚本语言,我想我可以把它弄清楚,但是对于批处理脚本,我不知道。
build议?
(注意:如果需要,我愿意运行一个自动脚本或其他的东西)
在这种情况下您可能需要PowerShell。 batch file中的date和时间操作相当困难(例如,甚至无法可靠地获取当前的date/时间),也可以比较任意的数据types。
在PowerShell中这是微不足道的:
Get-Process | where { $_.StartTime -lt (Get-Date).AddHours(-4) } | Stop-Process
ETA:经过多一点思考,在一个batch file中这可能是很容易的,今天晚些时候我会研究它,看看我能不能find一些工作。
既然你更熟悉bash,试试这个:
则PsList | mawk“$ 1 =='FMSCore'&& int(substr($ 8,1,1))> = 4 {print'pskill'$ 2}”| CMD
你可以从这里下载mawk: http ://www.klabaster.com/freeware.htm#mawk
(这个版本的awk对于win32来说是很棒的)