Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9

Дождаться появления процесса программы, если процесс не появляется, то перейти к следующей программе

15.08.2022, 18:58. Показов 1549. Ответов 13

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем!
Основная задача батника - это дождаться появления процесса программы (Prog1.exe) и перейти к следующей команде, когда этот процесс завершиться.

Проблема такая:
процесс (Prog1.exe) может и не появиться при работе программы и тогда получается простой.
Нужно так:
если процесс (Prog1.exe) не появляется в течении 30 минут (к примеру), то батник переходит к следующей команде
(start "02" 02
exit)

Помогите пожалуйста сделать вот это:
"если процесс (Prog1.exe) не появляется в течении 30 минут (к примеру), то батник переходит к следующей команде"
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.08.2022, 18:58
Ответы с готовыми решениями:

Как смоделировать матрицу условных вероятностей появления символа aj после символа ai по следующей программе
Только начал изучать Mathcad. Не могу разобраться как смоделировать матрицу условных вероятностей появления символа aj после символа ai по...

Если первый процесс за заданное время не выполнился, то прервать его и перейти к выполнению второго
Помогите плиз с реализацией. У меня есть допустим 2 процесса. Каждому процессу назначается время на выполнение. Если 1-ый процесс за...

Если не вводится число, то закрыть ввод и дождаться конца программы
так как программа будет с потоками надо дождаться конца программы, есть функция для ввода, так вот надо сделать так что если не вводится...

13
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.08.2022, 09:39
vovabart, добрый день! С какой периодичностью проверять появление процесса? Минута, 30 секунд, 10 секунд и т.п.
0
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9
16.08.2022, 10:10  [ТС]
Добавлено через 1 минуту
1 секунда.

Добавлено через 14 минут
Karen87, 1 секунда.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.08.2022, 10:13
vovabart, какая логика должна быть, если процесс появляется в течение получаса?
0
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9
16.08.2022, 10:37  [ТС]
Karen87, Когда процесс закончился, батник должен подождать примерно 80-100 секунд , потом завершить работу программы (Prog1.exe) вместе со всеми дочерними процессами и перейти к работе другого батника.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.08.2022, 10:42
vovabart, я задал вопрос на русском языке. Что нужно сделать, если процесс появляется?
0
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9
16.08.2022, 11:02  [ТС]
Karen87, Извините, не правильно задал вопрос в начале темы.

Основная задача батника - это дождаться появления процесса(D1_Prog1.exe) программы(Prog1.exe) и перейти к следующей команде, когда этот процесс завершиться.

Проблема такая:
процесс (D1_Prog1.exe) может и не появиться при работе программы(Prog1.exe) и тогда получается простой.
Под "простоем" имеется ввиду: батник ожидает появления указанного процесса(D1_Prog1.exe). Т.е. если указанный процесс не появляется, то батник будет ожидать его вечно.
А нужно ограничить ожидание указанного процесса(D1_Prog1.exe) 30-ю минутами.

Добавлено через 2 минуты
Цитата Сообщение от Karen87 Посмотреть сообщение
Что нужно сделать, если процесс появляется?
Ничего не нужно делать, процесс работает автономно и завершается сам, когда выполнил свою работу.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.08.2022, 11:10
vovabart, вот этот кусок кода будет ожидать в течение получаса появление процесса:
Windows Batch file
1
2
3
4
@echo off
powershell -executionpolicy bypass -command "$start=get-date; while (((get-date) - $start).totalminutes -lt 30) {$check=Get-Process | where {$_.name -eq 'd1_prog1'}; if ($check) {break}; Start-Sleep -Seconds 1}"
pause
exit
1
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9
16.08.2022, 12:08  [ТС]
Karen87, Помогите вставить ваш кусок кода.

У меня имеется такой вот код:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@echo off
:: Батник добавлен в автозагрузку, таймаут для полной загрузки виндовс и всех ее служб.
timeout /t 100 /nobreak
goto :start
 
:restart
taskkill /f /im "Prog_1.exe" /t
timeout /t 5 /nobreak
set process=Prog_2.exe
tasklist /NH /FO CSV /V /FI "IMAGENAME eq Prog_2.exe" | find /i "Prog_2 Crash Report">nul
if %errorLevel% == 0 goto :reboot
if %errorLevel% == 1 goto :start
 
:reboot
cls
netcfg -d
shutdown /r /f /t 30
goto :exit
 
::Начало
:start
cls
set process=D1_Prog_1.exe
:: Запуск основной программы (Программа 1)
start "" "C:\Users\%USERNAME%\AppData\Local\Programs\Prog_1\Prog_1.exe" | ping -n 25 -a -w 10000 127.0.0.1 >nul
:wait
timeout /t 1 /nobreak
set process=Prog_2.exe
:: Мониторинг программы 2 (она запустилась вместе с виндовс, без этой программы работа основной программы 1 невозможна)
tasklist /FI "IMAGENAME eq Prog_2.exe" /NH | find /i "Prog_2.exe">nul
if %errorLevel% == 0 goto :check_D2
if %errorLevel% == 1 goto :reboot
:check_D2
:: Мониторинг дочернего процесса программы 1 (если этого процесса нет, то значит основная программа закрылась)
tasklist /FI "IMAGENAME eq D2_Prog_1.exe" /NH | find /i "D2_Prog_1.exe">nul
if %errorLevel% == 0 goto :check_D1
if %errorLevel% == 1 goto :restart
:check_D1
:: Мониторинг дочернего процесса программы 1 (если этот процесс появился и завершил свою работу, то это значит, что основная программа выполнила поставленную ей задачу)
TASKLIST /FI "IMAGENAME eq D1_Prog_1.exe" /NH | find /i "D1_Prog_1.exe" >nul
if %errorlevel%==0 goto :endjob
if %errorlevel%==1 goto :wait
 
:endjob
echo D1_Prog_1 process end job
timeout /t 80 /nobreak
 
:exit
exit
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.08.2022, 12:17
Цитата Сообщение от vovabart Посмотреть сообщение
У меня имеется такой вот код:
Я рад за Вас, но изучать Ваш код я не намерен. В чём проблема после запуска процесса вставить 2 строку из моего кода? Я так предполагаю это 25 строка
0
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9
16.08.2022, 13:21  [ТС]
Karen87,
Цитата Сообщение от Karen87 Посмотреть сообщение
В чём проблема после запуска процесса вставить 2 строку из моего кода? Я так предполагаю это 25 строка
мой код по очереди проверяет наличие трех процессов
2 из них это запущенные программы, если один или два эти процесса исчезают, то код просто перезапускает их.
Третий процесс ожидается и когда он появился, код переходит к таймауту на 80 секунд

Проблема такая:
пока код не завершит выполнение Вашей строки (ожидание процесса 'd1_prog1' или не истечет указанное время) он ничего не делает, кроме мониторинга указанного процесса.

Нужно (одновременно):
чтобы код мониторил наличие двух указанных процессов и в случае их отсутствия перезапустил их (работает 2 программы, если они закрылись, то батник перезапускает их)
и
чтобы код ожидал появления указанного процесса и когда этот процесс появился, перешел к таймауту на 80 секунд (процесс работает автономно и завершается сам, когда выполнил свою работу, ничего не нужно делать)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
16.08.2022, 13:51
vovabart, ну создайте второй батник, в который закиньте мониторинг, который я написал. Запускайте так примерно:
Windows Batch file
1
start "" "monitoring_2.bat"
1
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9
16.08.2022, 14:14  [ТС]
Karen87, Спасибо за подсказку, попробую слепить.
0
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 9
18.08.2022, 00:36  [ТС]
Karen87,
Цитата Сообщение от Karen87 Посмотреть сообщение
вот этот кусок кода будет ожидать в течение получаса появление процесса:
Можно сюда добавить, что-то вроде "ERRORLEVEL" , чтоб он переходил в первый батник на нужную строку, если время истекло или процесс завершился, например:

monitoring.cmd
Windows Batch file
1
2
3
4
5
6
7
@echo off
powershell -executionpolicy bypass -command "$start=get-date; while (((get-date) - $start).totalminutes -lt 2) {$check=Get-Process | where {$_.name -eq 'd1_prog1'}; if ($check) {break}; Start-Sleep -Seconds 1}"
 
ERRORLEVEL "время истекло" goto :время истекло
ERRORLEVEL "процесс завершился" goto :процесс завершился
 
exit
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
start "" "Prog1.exe" | ping -n 25 -a -w 10000 127.0.0.1 >nul
timeout /t 5 /nobreak
start "monitoring" monitoring
 
:wait
timeout /t 1 /nobreak
tasklist /NH /FO CSV /V /FI "IMAGENAME eq cmd.exe" | find /i "monitoring">nul
if %errorLevel% == 0 goto :wait
 
:время истекло
echo время истекло
timeout /t 5 /nobreak
 
:процесс завершился
echo процесс завершился
timeout /t 80 /nobreak
 
exit
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2022, 00:36
Помогаю со студенческими работами здесь

Как сделать так что бы батник мониторил процесс и если процесс перезепустился то запуск или перезапуск другой программы
помогите , как сделать так что бы батник мониторил процесс и если процесс перезепустился то запуск или перезапуск другой программыпро...

Завершение одного процесса, если другой процесс не обнаружен
Здравствуйте помогите пожалуйста сам не очень разбираюсь на надежда знающих людей которые не против помочь! В общем у меня есть ярлык...

Дождаться появления стороннего окна
я знаю название процесса и название окна и моя задача состоит в том, что бы не пускать программу дальше пока не запустится процесс и не...

Дождаться появления HTML элемента
Всем привет. Подскажите как можно приостановить дальнейшее выполнение до тех пор пока на загружаемой странице не появится нужный html...

Как вывести id процесса потомка, если мой процесс является предком?
Как вывести id процесса потомка, если мой процесс является предком?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru