эффективный способ продолжать проверять, работает ли программа с пакетным скриптом

Я хотел бы написать пакетный скрипт, и часть скрипта я хочу проверить, работает ли программа1.exe. Когда программа Program1.exe больше не работает, я хочу что-то сделать.

Я могу написать цикл while, чтобы сделать это, но он будет проверять снова и снова и использовать 100% одного из моих ядер в моем процессоре.

Есть ли эффективный способ проверки? Может быть, хак, который проверяет это условие раз в секунду?

Спасибо


person user3240815    schedule 29.08.2014    source источник
comment
comment
@user3469517 user3469517 команда sleep есть не во всех версиях Windows и устарела.   -  person Alex    schedule 30.08.2014
comment
возможный дубликат Как проверить, процесс выполняется через пакетный скрипт   -  person npocmaka    schedule 30.08.2014
comment
Ваш пакетный скрипт запускал program1.exe?   -  person dbenham    schedule 30.08.2014
comment
Да, мой пакетный скрипт запускал program1.exe   -  person user3240815    schedule 30.08.2014


Ответы (3)


Попробуйте так:

@echo off
Set "MyProcess=Notepad.exe"

:start
tasklist | find /i "%MyProcess%">nul && goto:wait || start %MyProcess%
goto:start

:wait
ping localhost -n 3 >nul
goto:start

Просто замените Notepad.exe на название вашей программы

person SachaDee    schedule 29.08.2014

Есть ли эффективный способ проверки? Может быть, хак, который проверяет это условие раз в секунду?

Используйте команду timeout /t 1. Если вы не хотите, чтобы появлялось сообщение «Ожидание 1 секунды, нажмите клавишу для продолжения…», используйте timeout /t 1 > nul.

person Pokechu22    schedule 29.08.2014

вы можете использовать цикл for /f с tasklist для проверки процесса с тайм-аутом в 1 секунду с помощью команды ping (вместо этого вы также можете использовать timeout /t 1 >nul). Следующий пример взят из одного из моих скриптов:

:CMBK
ping -a -n 1 127.0.0.1 1>2>nul
FOR /F "tokens=1,2,3 delims=: " %%A IN ('tasklist /fi "imagename eq program1.exe" /fo list') do set imgnm=%%A
if not '%imgnm%'=='INFO' goto cmbk
person Alex    schedule 29.08.2014