标题: [系统相关] [已解决]批处理如何监控一个进程,等这个进程结束一分钟后关机? [打印本页]
作者: 001011 时间: 2011-8-18 21:44 标题: [已解决]批处理如何监控一个进程,等这个进程结束一分钟后关机?
本帖最后由 001011 于 2011-8-19 19:19 编辑
假设这个进程是a.exe。这个进程是个识别软件的进程,对每张图片进行识别的时候,这一张转换完成 在转换下一张的时候这个进程会自动终止,当读取到下一张图片的时候这个进程就会出现。所以不能在某个时刻没有监听到这个进程就判断可以关机了。而是连续一分钟没有这个进程出现才能代表这个任务已经结束,才能关机!
作者: xslxslxsl 时间: 2011-8-18 22:45
本帖最后由 xslxslxsl 于 2011-8-19 22:16 编辑
是不是你那个A.EXE停止后,在进程中就消失了,也就是大于等于一分钟未发现该进程就可以视为程序停止,可以关闭计算机了吗?- @echo off
- :RESTART
- tasklist /FI "username eq administrator" | find /C "a.exe" > temp.txt
- set /p n= < temp.txt
- del /F temp.txt
- ping -n 100 172.0.0.1 > nul
- tasklist /FI "username eq administrator" | find /C "a.exe" > t.txt
- set /p m= < t.txt
- del /F t.txt
- set /a b=n+m
- if "%b%"=="0" (shutdown -s ) else echo 程序还在运行
- goto restart
复制代码
写得有些粗糙,可以修改ping -n 100 172.0.0.1 中n后面的100来延长时间,我还真不知道发一个数据包大概是多久哦。
作者: xzix 时间: 2011-8-18 22:53
酱紫
@echo off
:A
set var=0
for /f %%a in ('tasklist') do (if /i %%a==A.exe set var=1)
if %var%==1 (echo 存在) else (GOTO B)
GOTO A
:B
echo.
shutdown -s -t 60
邮箱‘;[email]xzix@qq.com[/email]
作者: 001011 时间: 2011-8-18 23:17
是不是你那个A.EXE停止后,在进程中就消失了,也就是大于等于一分钟未发现该进程就可以视为程序停止,可以关 ...
xslxslxsl 发表于 2011-8-18 22:45
是的,一分钟之内没有这个进程就可以关机了 谢谢
作者: 001011 时间: 2011-8-18 23:26
是不是你那个A.EXE停止后,在进程中就消失了,也就是大于等于一分钟未发现该进程就可以视为程序停止,可以关 ...
xslxslxsl 发表于 2011-8-18 22:45
我如何改为我的自己的进程呢?难道是改:notepad.exe
作者: 001011 时间: 2011-8-18 23:27
酱紫
@echo off
:A
set var=0
for /f %%a in ('tasklist') do (if /i %%a==A.exe set var=1)
if %var% ...
xzix 发表于 2011-8-18 22:53
貌似没有延时呀 只要没有A.EXE就马上关机了
作者: xzix 时间: 2011-8-19 00:06
回复 6# 001011
@echo off
:A
set var=0
for /f %%a in ('tasklist') do (if /i %%a==A.exe set var=1)
if %var%==1 (echo 存在) else (GOTO B)
GOTO A
:B
echo.
shutdown -s -t 60
作者: smith203 时间: 2011-8-19 14:45
60秒就是延时吧。
作者: 001011 时间: 2011-8-19 19:18
还是不行呀 我现在用按键精灵解决了这个问题 谢谢啦
作者: xslxslxsl 时间: 2011-8-19 22:17
回复 5# 001011
我刚刚上网看到你的消息,我当时是用记事本(notepad)做测试的,其实就是将那NOTEPAD的进程改成你那个程序的进程就可以了。不好意思回话迟了。
作者: wolfan 时间: 2011-8-20 12:40
这个其实就是用 tasklist、find 、ping -n 和管通或者FOR就可以了。
俺还是不太会用FOR,还是用 “| && ||”这个简单的好用的判断句顺手的说。~
作者: 001011 时间: 2011-8-21 00:21
回复 001011
我刚刚上网看到你的消息,我当时是用记事本(notepad)做测试的,其实就是将那NOTE ...
xslxslxsl 发表于 2011-8-19 22:17
非常感谢您,非常好用。我从100调整到了3 OK
作者: cjiabing 时间: 2011-8-21 01:06
- @echo off&setlocal enabledelayedexpansion
- :loop
- set dp_var=1
- call :DetechProcess
- ping /n 60 127.0.1>nul
- if !dp_var!==1 (shutdown -s -t 60) else (goto loop)
- echo over
- pause
- exit
- :DetechProcess
- for /f "tokens=1" %%a in ('tasklist /fi "IMAGENAME eq notepad.exe" /FO TABLE /NH') do (
- if /i "%%a"=="notepad.exe" (set dp_var=0&ping /n 20 127.0.1>nul&goto DetechProcess)
- )
- goto :eof
复制代码
作者: xslxslxsl 时间: 2011-8-21 20:48
回复 12# 001011
不用客气哦,好用就行了,大家都是为了学习嘛,这里的人很多都很耐心的,嘻嘻。
作者: yakeyun 时间: 2021-7-8 16:53
@echo off
::隐藏窗口
if "%1" neq "1" (
>"%temp%\tmp.vbs" echo set WshShell = WScript.CreateObject^(^"WScript.Shell^"^)
>>"%temp%\tmp.vbs" echo WshShell.Run chr^(34^) ^& %0 ^& chr^(34^) ^& ^" 1^",0
start /d "%temp%" tmp.vbs
exit
)
::执行代码
title 进程监控
::从进程列表中查找指定进程
:start
tasklist /nh>C:\kill.ini
@find /I /C "a.exe" C:\kill.ini > nul
if %ERRORLEVEL% == 0 (
ping 127.1 -n 9 >nul
goto start
) else (
echo %date%%time% 检测不到进程,5秒后执行关机 >>c:\log.ini
shutdown -s -t 5
)
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |