вторник, 10 апреля 2012 г.

Проверка запущенных процессов в командной строке Windows

Передо мной встала задача: проверить запущен ли процесс, и если нет, то запустить его.

Общий шаблон решения выглядит следующим образом (файл check.cmd):

@echo off

rem Исправьте имя процесса по-умолчанию
set filename=chrome.exe
if "%1" neq "" set filename=%1

for /f %%a in ('tasklist /nh /fi "imagename eq %filename%" ^| find /c "%filename%"') do set /a quantity=%%a
rem Если запущена 1 и более копий процесса
if %quantity% geq 1 goto ALREADY_RUN

echo No processes of %filename%! Doing stuff...
rem ... Вставьте сюда свои команды, когда процесс НЕ запущен ...
goto END

:ALREADY_RUN
echo Already run %quantity% processes of %filename%
rem ... Вставьте сюда свои команды, когда процесс запущен ...

:END
pause

Пример запуска скрипта:


Изменим его с целью проверки процесса, например, калькулятора (calc.exe). Если калькулятор не запущен, то запустить его. И так в бесконечном цикле... (оставить скрипт можно, например, через Ctrl+C):

@echo off

set filename=calc.exe
if "%1" neq "" set filename=%1

:BEGIN

for /f %%a in ('tasklist /nh /fi "imagename eq %filename%" ^| find /c "%filename%"') do set /a quantity=%%a
if %quantity% geq 1 goto ALREADY_RUN

echo Run %filename%...
start %filename%

goto END

:ALREADY_RUN
echo Already run %quantity% processes of %filename%

:END
rem Ждём 10 секунд между проверками
timeout /t 10
goto BEGIN

Таким образом, каждые 10 секунд проверяется наличие заданного числа копий процесса (в данном случае 1). Если такого числа процессов нет, то запускается очередной.

Если программа находится в нестандартной папке, то начало скрипта можно немного изменить:

@echo off

d:
cd "D:\Programs\Test Pro v123"
set filename=Tester.exe
if "%1" neq "" set filename=%1

:BEGIN
...

Желаю удачи!

2 комментария:

  1. У меня на серваке прога для таких дел крутится, ProManager(www.basicsoft.net/products.html), гарантирует, что выбранные программы будут всегда или в определенный отрезок времени запущены, а другим не дает запуститься. Мне помогло, теперь сплю спокойно по ночам :)

    ОтветитьУдалить