找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22018|回复: 8

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

[复制链接]
发表于 2010-5-31 10:27:00 | 显示全部楼层 |阅读模式
请问:
我想做一个进程监控的批处理。
批处理怎么监控进程阿。
比如:
进程A.exe我只想他保持5个同运行多了的直接结束阿。~

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2010-5-31 11:58:03 | 显示全部楼层
超过5个的时候,结束哪个?还是需要全部结束?
 楼主| 发表于 2010-5-31 13:33:59 | 显示全部楼层
超过5个结束进程A.exe
但是不是全部结束,结束多出来的进程A.exe
进程A.exe始终保持5个运行。
谢谢大大了。~

[ 本帖最后由 Death 于 2010-5-31 13:35 编辑 ]
发表于 2010-5-31 15:20:56 | 显示全部楼层

  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 编辑 ]
 楼主| 发表于 2010-5-31 15:47:08 | 显示全部楼层
很感谢4L的大大给出来的代码但是没有起到做用
我运行了6个A.EXE但是它没有关闭多出来的那个A.EXE
发表于 2010-5-31 15:47:25 | 显示全部楼层
  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 编辑 ]

评分

参与人数 1PB +5 收起 理由
Batcher + 5 乐于助人

查看全部评分

发表于 2010-5-31 16:12:20 | 显示全部楼层
  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 编辑 ]

评分

参与人数 1PB +5 收起 理由
Batcher + 5 乐于助人

查看全部评分

 楼主| 发表于 2010-5-31 16:21:49 | 显示全部楼层
谢谢各位大大。~
谢谢大大们给出的代码。~
发表于 2010-6-8 12:59:02 | 显示全部楼层
写的时候没做测试,忘记开变量扩展,少了一句,另外 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:23 , Processed in 0.020950 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表