Batch file 进程超过特定时间(运行时间)时PsList/PsKill所需的批处理文件帮助
我想请求一些帮助来创建一个批处理文件,以便在windows服务器上运行,该文件将监视一些进程,这些进程有时会被“卡住”并在终止后继续运行 具体地说,我可以在PsList命令的“运行时间”列中看到进程的“年龄” 下一步,我只想终止超过4小时的进程。所以我相信我们需要解析我的PsList命令的结果,提取最后一列,解析几个小时,如果我们发现它“足够老”,我们解析出它的PID并杀死它 如果我们讨论的是bash或其他脚本语言,我想我可以理解,但对于批处理脚本,我不知道 推荐 (注意:如果需要,我愿意运行autoit脚本或其他东西) 注意Batch file 进程超过特定时间(运行时间)时PsList/PsKill所需的批处理文件帮助,batch-file,kill,tasklist,Batch File,Kill,Tasklist,我想请求一些帮助来创建一个批处理文件,以便在windows服务器上运行,该文件将监视一些进程,这些进程有时会被“卡住”并在终止后继续运行 具体地说,我可以在PsList命令的“运行时间”列中看到进程的“年龄” 下一步,我只想终止超过4小时的进程。所以我相信我们需要解析我的PsList命令的结果,提取最后一列,解析几个小时,如果我们发现它“足够老”,我们解析出它的PID并杀死它 如果我们讨论的是bash或其他脚本语言,我想我可以理解,但对于批处理脚本,我不知道 推荐 (注意:如果需要,我愿意运行
- skip=8用于过滤掉pslist版权和版本信息,可能是特定于版本的
- 无法处理文件名中带有空格的exe文件李>
- 这还将列出系统进程,如SMS、winlogon、svchost等,您不应终止这些进程(因此,不要以系统身份运行此进程,如果以提升管理员身份运行,也可能会出现问题)
tasklist/FI“CPUTIME ge 04:00:00”
用Windows脚本主机或Powershell解决这个问题可能更好(列出带有WMI的进程,这样你就可以得到实际的对象,而不必处理字符串)所以我实际上自己解决了这个问题-必须使用AutoIt和一个额外的过滤器来查看每个进程的命令行参数,然后查看每个进程的运行时间,然后删除旧进程 以下是全文: 我们已设置Connect,使FMSCore进程在2小时后过期,但如果有人仍连接到录音,它将保留旧的僵尸FMSCore进程,直到该人断开连接 这种情况经常发生,但不起作用——而且似乎没有垃圾收集来清理旧的FMSCore 所以我们创建了一个简单的AutoIt脚本,它可以编译成一个可以运行的EXE,但它有一些依赖性 以下依赖项/命令必须全部到位:
- c:\Windows\system32\pv.exe
- c:\Windows\system32\pslist.exe
- c:\Windows\system32\pskill.exe
- 脚本使用pv.exe查找所有FMS核心进程,这些进程的命令行参数包括“FLVPLAYERAP”(仅用于记录的课程)
- 对于每个返回的进程ID
- 它使用pslist列出详细信息,其中包括进程的时间
- 它使用正则表达式匹配查找“运行时间”
- 如果超过5小时(一个可配置参数),它将使用pskill终止进程
太棒了-感谢您提供的信息。。。没有解决我试图解决的问题,但确实给了我很好的信息。谢谢
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
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
)