标题: [系统相关] [已解决]批处理怎样监控进程? [打印本页]
作者: Death 时间: 2010-5-31 10:27 标题: [已解决]批处理怎样监控进程?
请问:
我想做一个进程监控的批处理。
批处理怎么监控进程阿。
比如:
进程A.exe我只想他保持5个同运行多了的直接结束阿。~
[ 本帖最后由 Death 于 2010-5-31 16:22 编辑 ]
作者: Batcher 时间: 2010-5-31 11:58
超过5个的时候,结束哪个?还是需要全部结束?
作者: Death 时间: 2010-5-31 13:33
超过5个结束进程A.exe
但是不是全部结束,结束多出来的进程A.exe
进程A.exe始终保持5个运行。
谢谢大大了。~
[ 本帖最后由 Death 于 2010-5-31 13:35 编辑 ]
作者: caruko 时间: 2010-5-31 15:20
- set "num=0"
- :loop
- for /f "tokens=2" %%i in ('tasklist ^|findstr "A.exe"') do (
- if not defined %%i set %%i=%%i & set /a num+=1
- if %num% GTR 6 taskkill /pid %%i /T &set /a num-=1&set "%%i="
- )
- ping 127.1>nul
- goto :loop
复制代码
[ 本帖最后由 caruko 于 2010-5-31 15:43 编辑 ]
作者: Death 时间: 2010-5-31 15:47
很感谢4L的大大给出来的代码但是没有起到做用
我运行了6个A.EXE但是它没有关闭多出来的那个A.EXE
作者: hanyeguxing 时间: 2010-5-31 15:47
- :han
- @echo off&setlocal enabledelayedexpansion
- 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
- ping -n 10 127.1 >nul&&Endlocal&&goto:han
复制代码
ping 用来延迟时间
[ 本帖最后由 hanyeguxing 于 2010-5-31 15:51 编辑 ]
作者: del 时间: 2010-5-31 16:12
- @echo off
- if "%~1" neq "h" (
- echo 正在隐藏批处理...
- >"%temp%\tmp.vbs" echo createobject("wscript.shell"^).run """%~f0"" h",0
- "%temp%\tmp.vbs"
- exit /b
- )
-
- : --------------- 设置 ---------------
- set 进程名=A.exe
- set 进程数量=5
- set "检测间隔时间=5000" // 单位是毫秒
- : --------------- /设置 --------------
-
- >"%temp%\tmp.vbs" echo Wscript.Sleep %检测间隔时间%
- SetLocal EnableDelayedExpansion
-
- :Loop
- set Count=
- set PID=
- for /f "tokens=2" %%a in ('tasklist /nh /fi "imagename eq !进程名!"') do (
- set /a Count += 1
- if !Count! gtr %进程数量% (
- set PID=!PID! /PID %%a
- )
- )
- if defined PID taskkill /f %PID% >nul
- "%temp%\tmp.vbs"
- goto Loop
复制代码
[ 本帖最后由 del 于 2010-5-31 16:18 编辑 ]
作者: Death 时间: 2010-5-31 16:21
谢谢各位大大。~
谢谢大大们给出的代码。~
作者: caruko 时间: 2010-6-8 12:59
写的时候没做测试,忘记开变量扩展,少了一句,另外 GTR 6改成GTR 5
这个只会结束后开的进程,先开的5个进程不会结束
如果用户结束了前5个进程中的几个,不够5个了,后开的还是会结束掉
解决需要再加几句代码,检测某个PID进程是否存在,这里就不写了- @echo off&setlocal enabledelayedexpansion
- set "num=0"
- :loop
- for /f "tokens=2" %%i in ('tasklist ^|findstr "A.exe"') do (
- if not defined %%i set %%i=%%i & set /a num+=1
- if %num% GTR 5 taskkill /pid %%i /T &set /a num-=1&set "%%i="
- )
- ping 127.1>nul
- goto :loop
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |