Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 进程超过特定时间(运行时间)时PsList/PsKill所需的批处理文件帮助_Batch File_Kill_Tasklist - Fatal编程技术网

Batch file 进程超过特定时间(运行时间)时PsList/PsKill所需的批处理文件帮助

Batch file 进程超过特定时间(运行时间)时PsList/PsKill所需的批处理文件帮助,batch-file,kill,tasklist,Batch File,Kill,Tasklist,我想请求一些帮助来创建一个批处理文件,以便在windows服务器上运行,该文件将监视一些进程,这些进程有时会被“卡住”并在终止后继续运行 具体地说,我可以在PsList命令的“运行时间”列中看到进程的“年龄” 下一步,我只想终止超过4小时的进程。所以我相信我们需要解析我的PsList命令的结果,提取最后一列,解析几个小时,如果我们发现它“足够老”,我们解析出它的PID并杀死它 如果我们讨论的是bash或其他脚本语言,我想我可以理解,但对于批处理脚本,我不知道 推荐 (注意:如果需要,我愿意运行

我想请求一些帮助来创建一个批处理文件,以便在windows服务器上运行,该文件将监视一些进程,这些进程有时会被“卡住”并在终止后继续运行

具体地说,我可以在PsList命令的“运行时间”列中看到进程的“年龄”

下一步,我只想终止超过4小时的进程。所以我相信我们需要解析我的PsList命令的结果,提取最后一列,解析几个小时,如果我们发现它“足够老”,我们解析出它的PID并杀死它

如果我们讨论的是bash或其他脚本语言,我想我可以理解,但对于批处理脚本,我不知道

推荐

(注意:如果需要,我愿意运行autoit脚本或其他东西)

注意

  • skip=8用于过滤掉pslist版权和版本信息,可能是特定于版本的
  • 无法处理文件名中带有空格的exe文件
  • 这还将列出系统进程,如SMS、winlogon、svchost等,您不应终止这些进程(因此,不要以系统身份运行此进程,如果以提升管理员身份运行,也可能会出现问题)
如果可以接受按CPU时间进行过滤,则可以使用一个简单的内置命令:
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
)