ефективен начин да продължите да проверявате дали програмата все още работи с пакетен скрипт

Бих искал да напиша пакетен скрипт и част от скрипта искам да проверя дали program1.exe все още работи. След като program1.exe вече не работи, искам да направя нещо.

Мога да напиша цикъл while, за да направя това, но той ще продължи да проверява отново и отново и ще използва 100% от едно от моите ядра в моя процесор.

Има ли ефективен начин за проверка? Може би хак, който проверява това условие веднъж на секунда?

Благодаря


person user3240815    schedule 29.08.2014    source източник
comment
възможен дубликат на Как да изчака процесът да приключи, за да изпълни друг процес в пакет   -  person user3469517    schedule 30.08.2014
comment
@user3469517 командата за заспиване не е във всички версии на 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