[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] [已解决]批处理怎样监控进程?

请问:
我想做一个进程监控的批处理。
批处理怎么监控进程阿。
比如:
进程A.exe我只想他保持5个同运行多了的直接结束阿。~

[ 本帖最后由 Death 于 2010-5-31 16:22 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

超过5个的时候,结束哪个?还是需要全部结束?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

超过5个结束进程A.exe
但是不是全部结束,结束多出来的进程A.exe
进程A.exe始终保持5个运行。
谢谢大大了。~

[ 本帖最后由 Death 于 2010-5-31 13:35 编辑 ]

TOP

  1. set "num=0"
  2. :loop
  3. for /f "tokens=2" %%i in ('tasklist ^|findstr "A.exe"') do (
  4.         if not defined %%i set %%i=%%i & set /a num+=1
  5.         if %num% GTR 6 taskkill /pid %%i /T &set /a num-=1&set "%%i="
  6. )
  7. ping 127.1>nul
  8. goto :loop
复制代码

[ 本帖最后由 caruko 于 2010-5-31 15:43 编辑 ]

TOP

很感谢4L的大大给出来的代码但是没有起到做用
我运行了6个A.EXE但是它没有关闭多出来的那个A.EXE

TOP

  1. :han
  2. @echo off&setlocal enabledelayedexpansion
  3. for /f "tokens=1,2" %%a in ('tasklist /fo list /fi "Imagename eq qq.exe"') do if /i "%%a"=="pid:" set/a ye+=1&if !ye! gtr 5 taskkill /pid %%b /f>nul
  4. ping -n 10 127.1 >nul&&Endlocal&&goto:han
复制代码
ping 用来延迟时间

[ 本帖最后由 hanyeguxing 于 2010-5-31 15:51 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  1. @echo off
  2. if "%~1" neq "h" (
  3.     echo 正在隐藏批处理...
  4.     >"%temp%\tmp.vbs" echo createobject("wscript.shell"^).run """%~f0"" h",0
  5.     "%temp%\tmp.vbs"
  6.     exit /b
  7. )
  8. : --------------- 设置 ---------------
  9. set 进程名=A.exe
  10. set 进程数量=5
  11. set "检测间隔时间=5000" // 单位是毫秒
  12. : --------------- /设置 --------------
  13. >"%temp%\tmp.vbs" echo Wscript.Sleep %检测间隔时间%
  14. SetLocal EnableDelayedExpansion
  15. :Loop
  16. set Count=
  17. set PID=
  18. for /f "tokens=2" %%a in ('tasklist /nh /fi "imagename eq !进程名!"') do (
  19.     set /a Count += 1
  20.     if !Count! gtr %进程数量% (
  21.         set PID=!PID! /PID %%a
  22.     )
  23. )
  24. if defined PID taskkill /f %PID% >nul
  25. "%temp%\tmp.vbs"
  26. goto Loop
复制代码

[ 本帖最后由 del 于 2010-5-31 16:18 编辑 ]
1

评分人数

TOP

谢谢各位大大。~
谢谢大大们给出的代码。~

TOP

写的时候没做测试,忘记开变量扩展,少了一句,另外 GTR 6改成GTR 5
这个只会结束后开的进程,先开的5个进程不会结束
如果用户结束了前5个进程中的几个,不够5个了,后开的还是会结束掉
解决需要再加几句代码,检测某个PID进程是否存在,这里就不写了
  1. @echo off&setlocal enabledelayedexpansion
  2. set "num=0"
  3. :loop
  4. for /f "tokens=2" %%i in ('tasklist ^|findstr "A.exe"') do (
  5.         if not defined %%i set %%i=%%i & set /a num+=1
  6.         if %num% GTR 5 taskkill /pid %%i /T &set /a num-=1&set "%%i="
  7. )
  8. ping 127.1>nul
  9. goto :loop
复制代码

TOP

返回列表