С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/165: Рейтинг темы: голосов - 165, средняя оценка - 4.65
POMAXA
1

Отслеживание зависания (состояния "не отвечает") программы и её перезапуск

21.01.2013, 19:05. Показов 33286. Ответов 95
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Dragokas, благодарю за программку, как раз то, что нужно для моих целей!

Единственный вопрос, что нужно дописать в вашу программку, чтобы после перезапуска зависшего приложения спустя заданное время в миллисекундах, программа имитировала нажатие клавиши Enter для перезапущенного приложения и через 2 секунды (например) "нажимала" Enter сново, для запущенного приложения. И чтобы второй Enter, при необходимости можно было отключить. И первый тоже, при необходимости, отключить можно было.

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

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

Еще раз благодарю за данную программку, ибо хотел писать ее сам, но вовремя увидел ваш труд.

 Комментарий модератора 
Комментарий:
Оригинальный код находится в теме: Полезные BAT/CMD скрипты
Дополнительные варианты решений на других языках расположены в разделе: Visual Basic
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2013, 19:05
Ответы с готовыми решениями:

Отслеживание состояния браузера
Подскажите, пожалуйта, каким образом в Servlet-ах можно отследить завершение работы браузера...

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

Отслеживание состояния приложения
Всем привет! Подскажите пожалуйста, как вы отслеживаете когда "приложение запускается" ->...

Отслеживание состояния checkbox?
Добрый день. Есть 5 текстовых полей(input) и один checkbox. Необходимо сделать проверку если все 5...

95
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
21.01.2013, 20:34 2
Наиболее оптимально я бы посоветовал воспользоваться VBS-скриптом

параметр 1 - имя программы
параметр 2 - ожидание (в мс.) перед нажатием клавиши Enter (опционально)

Sendkey.vbs
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'1-th parameter is a name of your program
'2-th parameter is optional (count of msec. to wait)
Set objArgs = wscript.Arguments
If objArgs.Count = 0 then WScript.Echo "This Script cannot be run witout parameters"
 
Set WShell = CreateObject("WScript.Shell")
'Run the program
Set WshExec = WShell.Exec(objArgs(0))
'Waiting
If objArgs.Count = 2 then WScript.Sleep(objArgs(1))
'Activate the program's window
WShell.AppActivate(WshExec.ProcessID)
'Little bit waiting for activation processed
WScript.Sleep(500)
'Sending keys
Wshell.sendKeys "{ENTER}"
Пример вызова:

Bash
1
cscript //nologo Sendkey.vbs program.exe 5000
Замените этой частью строку возобновления процесса в моем моего BAT-е.
2
8 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 2
03.02.2014, 10:34 3
Скрипт чоткий, вот только мелкожидкие малость каряво перевели команды, таким образом в русской версии вендов скрипт не работает..
гуглю
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
03.02.2014, 22:07 4
score4fun, по-подробнее... Что, как запускаете, на чем тестите, какие настройки.
Должно работать на всех версиях, начиная с XP.
0
9 / 1 / 0
Регистрация: 10.01.2014
Сообщений: 4
04.02.2014, 15:33 5
score4fun, с кодировкой может быть проблемы?
0
8 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 2
04.02.2014, 15:59 6
Dragokas, запускал на вин7 х64 - воркает, но нужно, чтобы так же воркало и на винХР СП3 рус, там не хочет... разгуглил, говорят, что в русской локализации тасклист не совсем корректно пашет, а именно фильтры, при этом у тасккилла таких проблем нет
0
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 2
15.03.2014, 07:13 7
Привет. В поиске решения своей проблемы наткнулся на код от Alex Dragokas и этот код очень оказался бы полезным в решении проблемы если бы позволил запускать другой процесс с определенными аргументами. Объясню: запускается процесс primer1.exe c аргументами /a /b /c при этом этот процесс активирует модуль primer2.res который выполняет основные действия и бывает зависает. Я не так силен в программировании как вы, возможно проблема в этом участке кода:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
:Restart %1-Proccess_PID %2-Process_Name
Echo ShutDown
Call :GetProcessInfo "%~1" "%~2" ProcessPath Param
taskkill /F /PID %~1
Call :Delay %DelayStartProcess%
pushd "%ProcessPath%"
start "" %Minimize%/%Priority% "%ProcessPath%\%~2" %Param%
popd
Echo %ProcessFullName% started.
::Delay before minimize by NirCMD utility
Call :Delay 3000
if defined WinTitle nircmd win min ititle "%WinTitle%"
if defined WinClass nircmd win min class "%WinClass%"
Call :Delay %MemDelay%
if defined MinMemory (
  tasklist /FI "IMAGENAME eq %~2" /FI "PID eq %~1" /FI "MEMUSAGE lt %MemDelay%" /FO CSV /NH|Find /i "%~2"&&(
    Call :Restart "%~1" "%~2"
Как переделать этот участок кода так чтобы в случае зависания процесса primer2.res, он завершался и запускался primer1.exe с аргументами /a /b /c ?
пока что весь код в таком виде:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
@echo off&:: by Alex Dragokas -05.01.13-
SetLocal EnableDelayedExpansion EnableExtensions
::Name of a watching processes (separeted by ,)
Set ProcNames=primer1.exe,primer2.res
::Delay (ms.) before the next check
Set /A DelayNewCheck=5000
::Delay (ms.) before starting a process after shutting down because of "not responding" status
Set DelayStartProcess=3000
::Setting Priority of Application to Run with (1 to 6):
::1 - LOW, 2 - BELOWNORMAL, 3 - NORMAL, 4 - ABOVENORMAL, 5 - HIGH, 6 - REALTIME
Set Priority=3
::Start the process in Minimize mode? (1 - Yes, 2 - No)
Set Minimize=2
::Delay (ms.) before checking for using of memory
::Set MemDelay=10000
::Count of bytes that application need to use after 3 + %MemDelay% ms. of new running.
::Set MinMemory=200000000
 
::ForceMinimizeOptions (with NirCMD utility). Recognizing by class or title of window (or part of it)
::Set WinClass=IW5 WinConsole
::Set WinTitle=Call of Duty
 
::The time (ms.) while we checking if a process really not responding all this time
Set /A BugTime=10000
::How many times we make a series of chekings (during %BugTime%)
Set /A BugChecks=10
 
Set /A BugIntervals=%BugChecks% - 1
Set /A BugIntervalsDelay=%BugTime% / %BugIntervals%
Call :PriorityEnum %Priority% Priority
if %Minimize%==1 (set Minimize=/MIN ) else (set Minimize=)
Set ProcNames="%ProcNames:,=" "%"
 
:begin
For %%A in (%ProcNames%) do call :WatchSingleProcess "%%~A"
Call :Delay %DelayNewCheck%
Goto :begin
 
 
:WatchSingleProcess %1-Name_of_Process
Set Process=%~1
Call :IsResponding "%Process%"
Set PID=%errorlevel%
if %PID% neq 0 (
  Call :GetProcessInfo "%PID%" "%Process%" ProcessPath Param
  <nul set /p test=Found Bug in %Process% PID=%PID% %ProcessPath% 
  for /L %%C in (1,1,%BugChecks%) do (
    Call :IsResponding "%Process%"
    if !errorlevel! neq 0 (
        <nul set /p test=.
        if %%C==%BugChecks% (Call :Restart "%PID%" "%Process%"& Exit /B)
        Call :Delay %BugIntervalsDelay%
      ) else (
        Echo Waked up
        Exit /B
    )
  )
)
Exit /B
 
 
:Delay %1-msec.
if "%1"=="" Exit /B
ping 192.168.254.254 -n 2 -w %~1 > nul
Exit /B
 
:IsResponding %1-ProcessName
For /f "tokens=1,2 delims=," %%A in (
  'tasklist /FI "IMAGENAME eq %~1" /FI "STATUS eq NOT RESPONDING" /FO CSV /NH') do (
    if /i "%%~A"=="%~1" Exit /B %%~B
)
Exit /B 0
 
:Restart %1-Proccess_PID %2-Process_Name
Echo ShutDown
Call :GetProcessInfo "%~1" "%~2" ProcessPath Param
taskkill /F /PID %~1
Call :Delay %DelayStartProcess%
pushd "%ProcessPath%"
start "" %Minimize%/%Priority% "%ProcessPath%\%~2" %Param%
popd
Echo %ProcessFullName% started.
::Delay before minimize by NirCMD utility
Call :Delay 3000
if defined WinTitle nircmd win min ititle "%WinTitle%"
if defined WinClass nircmd win min class "%WinClass%"
Call :Delay %MemDelay%
if defined MinMemory (
  tasklist /FI "IMAGENAME eq %~2" /FI "PID eq %~1" /FI "MEMUSAGE lt %MemDelay%" /FO CSV /NH|Find /i "%~2"&&(
    Call :Restart "%~1" "%~2"
))
Exit /B
 
:PriorityEnum %1-Constant %2-var.name
if %~1==1 Set %~2=LOW
if %~1==2 Set %~2=BELOWNORMAL
if %~1==3 Set %~2=NORMAL
if %~1==4 Set %~2=ABOVENORMAL
if %~1==5 Set %~2=HIGH
if %~1==6 Set %~2=REALTIME
Exit /B
 
:GetProcessInfo %1-Proccess_PID %2-Process_Name %3-var.Process_Path %4-var.Process_Parameters
::Getting the Process' Path and Parameters
for /f "tokens=1* delims==" %%A in (
  'wmic path win32_process where ^(ProcessID^=%~1 and name^="%~2"^) get "CommandLine"^,"ExecutablePath" /value^|findstr /BC:"CommandLine" /C:"ExecutablePath"') do (
  if "%%A"=="CommandLine" Set ProcParse=%%B
  if "%%A"=="ExecutablePath" Set ProcessPath=%%~dpB
)
Set %3=%ProcessPath:~0,-1%
::Parse Parameters
Set /A n=0& Set Param=
for %%A in (%ProcParse%) do Set /A n+=1& if !n! neq 1 (Set Param=!Param!%%A )
Set %4=%Param:~0,-1%
Exit /B
0
9 / 1 / 0
Регистрация: 10.01.2014
Сообщений: 4
15.03.2014, 08:06 8
Я создал ярлык для запускаемой программы с нужными параметрами, обозвал Robot.lnk
Добавил переменную
Windows Batch file
1
Set ProcessFullName=C:\bat\Proverka_robota\Robot.lnk
и изменил старт процесса
Windows Batch file
1
start "" %Minimize%/%Priority% %ProcessFullName%
Батник делал для проверки зависания 1С-ки, при ФТП обмене при обрыве связи зависает наглухо. Поставил проверку зависания примерно в течении 15 минут, если висит то перезапускает его. Плюс пишет время зависания и перезапуска процесса в лог файл и отправляет его на FTP-serv.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
@echo off
echo ProverkaRobota zapushena
SetLocal EnableDelayedExpansion EnableExtensions
::Name of a watching processes (separeted by ,)
Set ProcNames=example.exe,1cv8.exe
Set ProcessFullName=C:\bat\Proverka_robota\Robot.lnk
::Delay (ms.) before the next check
Set /A DelayNewCheck=10000
::Delay (ms.) before starting a process after shutting down because of "not responding" status
Set DelayStartProcess=5000
::Setting Priority of Application to Run with (1 to 6):
::1 - LOW, 2 - BELOWNORMAL, 3 - NORMAL, 4 - ABOVENORMAL, 5 - HIGH, 6 - REALTIME
Set Priority=3
::Start the process in Minimize mode? (1 - Yes, 2 - No)
Set Minimize=2
::The time (ms.) while we checking if a process really not responding all this time 700000
Set /A BugTime=300000
::How many times we make a series of chekings (during %BugTime%) 10 
Set /A BugChecks=10
 
Set /A BugIntervals=%BugChecks% - 1
Set /A BugIntervalsDelay=%BugTime% / %BugIntervals%
Call :PriorityEnum %Priority% Priority
if %Minimize%==1 (set Minimize=/MIN ) else (set Minimize=)
Set ProcNames="%ProcNames:,=" "%"
 
:begin
For %%A in (%ProcNames%) do call :WatchSingleProcess "%%~A"
Call :Delay %DelayNewCheck%
Goto :begin
 
 
:WatchSingleProcess %1-Name_of_Process
Set Process=%~1
Call :IsResponding "%Process%"
Set PID=%errorlevel%
if %PID% neq 0 (
  <nul set /p test=Found Bug in "%Process%" PID=%PID%
  for /L %%C in (1,1,%BugChecks%) do (
    Call :IsResponding "%Process%"
    if !errorlevel! neq 0 (
        <nul set /p test=.
        if %%C==%BugChecks% (Call :Restart "%PID%" "%Process%"& Exit /B)
        Call :Delay %BugIntervalsDelay%
      ) else (
        Echo Waked up
        Exit /B
    )
  )
)
Exit /B
 
 
:Delay %1-msec.
ping 192.168.254.254 -n 2 -w %~1 > nul
Exit /B
 
:IsResponding %1-ProcessName
For /f "tokens=1,2 delims=," %%A in (
  'tasklist /FI "IMAGENAME eq %~1" /FI "STATUS eq NOT RESPONDING" /FO CSV /NH') do (
    if /i "%%~A"=="%~1" Exit /B %%~B
)
Exit /B 0
 
:Restart %1-Proccess_PID %2-Process_Name
Echo ShutDown
md "c:/bat/Proverka_robota/log"
echo %date% %time% robot povis >>"log\%COMPUTERNAME%_%PROCESSOR_REVISION%_%USERNAME%.txt"
ftp -s:ftpcmd.dat
::Getting the Process' FullName (with Path)
::for /f "tokens=2 delims==" %%A in (
::  'wmic path win32_process where ^(ProcessID^=%~1 and name^="%~2"^) get "CommandLine" /value^|find "CommandLine"'
::) do (Set ProcessFullName=%%A)
 
taskkill /F /PID %~1
Call :Delay %DelayStartProcess%
start "" %Minimize%/%Priority% %ProcessFullName%
Echo %ProcessFullName% started successfully.
md "c:/bat/Proverka_robota/log"
echo %date% %time% robot zapushen >>"log\%COMPUTERNAME%_%PROCESSOR_REVISION%_%USERNAME%.txt"
ftp -s:ftpcmd.dat
Exit /B
 
:PriorityEnum %1-Constant %2-var.name
if %~1==1 Set %~2=LOW
if %~1==2 Set %~2=BELOWNORMAL
if %~1==3 Set %~2=NORMAL
if %~1==4 Set %~2=ABOVENORMAL
if %~1==5 Set %~2=HIGH
if %~1==6 Set %~2=REALTIME
Exit /B
0
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 1
13.08.2015, 14:35 9
WooFi, привет! у меня такая проблема, 1с подвисает, я искал скрин с расширением bat, чтобы он автоматически завершал подвисший 1с и по новой запускал., я нашел твой скрин, но я так понимаю, что мне нужно ставить свой путь для запуска моей 1с-ки ) если да, то подскажи куда именно можно вставить путь запуска проги.... спс
0
9 / 1 / 0
Регистрация: 10.01.2014
Сообщений: 4
14.08.2015, 07:37 10
Windows Batch file
6
Set ProcessFullName=C:\bat\Proverka_robota\Robot.lnk
Тут путь до ярлыка запуска 1С-ки.
Внутренности ярлыка например такие для файловой базы:
Код
"C:\Program Files\1cv82\8.2.18.102\bin\1cv8.exe" enterprise /f"D:\1C_BASE_Mag50" /nЛОГИН /pПАРОЛЬ
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
30.10.2015, 05:45 11
Здравствуйте.
На днях столкнулся с Вашим скриптом Responding3_for_forum.bat.
Очень удобная и полезная вещь, за что Вам отдельное СПАСИБО.

Сейчас использую его совместно со своей программой и здорово выручает.
Но только столкнулся с проблемой, если моё приложение зависает, то Ваш скрипт его перезапускает с легкостью.
Но если происходит "вылет" моего приложения (само по себе закрывается), то Ваш скрипт в данном случае бессилен.

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

Еще раз спасибо за Вашу работу.
0
9 / 1 / 0
Регистрация: 10.01.2014
Сообщений: 4
30.10.2015, 07:17 12
Использую такой скрипт, запускается планировщиком каждые полчаса.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
setlocal ENABLEDELAYEDEXPANSION
Set Process=1cv8
tasklist | Find /i "%Process%.exe" || (goto Else)
:THEN
echo ProverkaRobota zapushena
exit
Goto end
:ELSE
"C:\bat\Proverka_robota\Robot.lnk"
echo zapusk 1C
Ну и соответственно для себя меняете:
  • Set Process=1cv8 - наблюдаемый процесс
  • "C:\bat\Proverka_robota\Robot.lnk" - путь к запуску приложения
1
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
30.10.2015, 15:08 13
Здравствуйте.

А как можно вставить в уже готовый в батник Ваши действия по проверке "Пропавшего" процесса?
У меня просто круглосуточно запущен он...

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
@echo off&:: by Alex Dragokas -05.01.13-
SetLocal EnableDelayedExpansion EnableExtensions
::Name of a watching processes (separeted by ,)
Set ProcNames=example.exe,example2.exe
::Delay (ms.) before the next check
Set /A DelayNewCheck=5000
::Delay (ms.) before starting a process after shutting down because of "not responding" status
Set DelayStartProcess=3000
::Setting Priority of Application to Run with (1 to 6):
::1 - LOW, 2 - BELOWNORMAL, 3 - NORMAL, 4 - ABOVENORMAL, 5 - HIGH, 6 - REALTIME
Set Priority=3
::Start the process in Minimize mode? (1 - Yes, 2 - No)
Set Minimize=1
::Delay (ms.) before checking for using of memory
::Set MemDelay=10000
::Count of bytes that application need to use after 3 + %MemDelay% ms. of new running.
::Set MinMemory=200000000
 
::ForceMinimizeOptions (with NirCMD utility). Recognizing by class or title of window (or part of it)
::Set WinClass=IW5 WinConsole
::Set WinTitle=Call of Duty
 
::The time (ms.) while we checking if a process really not responding all this time
Set /A BugTime=10000
::How many times we make a series of chekings (during %BugTime%)
Set /A BugChecks=10
 
Set /A BugIntervals=%BugChecks% - 1
Set /A BugIntervalsDelay=%BugTime% / %BugIntervals%
Call :PriorityEnum %Priority% Priority
if %Minimize%==1 (set Minimize=/MIN ) else (set Minimize=)
Set ProcNames="%ProcNames:,=" "%"
 
:begin
For %%A in (%ProcNames%) do call :WatchSingleProcess "%%~A"
Call :Delay %DelayNewCheck%
Goto :begin
 
 
:WatchSingleProcess %1-Name_of_Process
Set Process=%~1
Call :IsResponding "%Process%"
Set PID=%errorlevel%
if %PID% neq 0 (
  Call :GetProcessInfo "%PID%" "%Process%" ProcessPath Param
  <nul set /p test=Found Bug in %Process% PID=%PID% %ProcessPath% 
  for /L %%C in (1,1,%BugChecks%) do (
    Call :IsResponding "%Process%"
    if !errorlevel! neq 0 (
        <nul set /p test=.
        if %%C==%BugChecks% (Call :Restart "%PID%" "%Process%"& Exit /B)
        Call :Delay %BugIntervalsDelay%
      ) else (
        Echo Waked up
        Exit /B
    )
  )
)
Exit /B
 
 
:Delay %1-msec.
if "%1"=="" Exit /B
ping 192.168.254.254 -n 2 -w %~1 > nul
Exit /B
 
:IsResponding %1-ProcessName
For /f "tokens=1,2 delims=," %%A in (
  'tasklist /FI "IMAGENAME eq %~1" /FI "STATUS eq NOT RESPONDING" /FO CSV /NH') do (
    if /i "%%~A"=="%~1" Exit /B %%~B
)
Exit /B 0
 
:Restart %1-Proccess_PID %2-Process_Name
Echo ShutDown
Call :GetProcessInfo "%~1" "%~2" ProcessPath Param
taskkill /F /PID %~1
Call :Delay %DelayStartProcess%
pushd "%ProcessPath%"
start "" %Minimize%/%Priority% "%ProcessPath%\%~2" %Param%
popd
Echo %ProcessFullName% started.
::Delay before minimize by NirCMD utility
Call :Delay 3000
if defined WinTitle nircmd win min ititle "%WinTitle%"
if defined WinClass nircmd win min class "%WinClass%"
Call :Delay %MemDelay%
if defined MinMemory (
  tasklist /FI "IMAGENAME eq %~2" /FI "PID eq %~1" /FI "MEMUSAGE lt %MemDelay%" /FO CSV /NH|Find /i "%~2"&&(
    Call :Restart "%~1" "%~2"
))
Exit /B
 
:PriorityEnum %1-Constant %2-var.name
if %~1==1 Set %~2=LOW
if %~1==2 Set %~2=BELOWNORMAL
if %~1==3 Set %~2=NORMAL
if %~1==4 Set %~2=ABOVENORMAL
if %~1==5 Set %~2=HIGH
if %~1==6 Set %~2=REALTIME
Exit /B
 
:GetProcessInfo %1-Proccess_PID %2-Process_Name %3-var.Process_Path %4-var.Process_Parameters
::Getting the Process' Path and Parameters
for /f "tokens=1* delims==" %%A in (
  'wmic path win32_process where ^(ProcessID^=%~1 and name^="%~2"^) get "CommandLine"^,"ExecutablePath" /value^|findstr /BC:"CommandLine" /C:"ExecutablePath"') do (
  if "%%A"=="CommandLine" Set ProcParse=%%B
  if "%%A"=="ExecutablePath" Set ProcessPath=%%~dpB
)
Set %3=%ProcessPath:~0,-1%
::Parse Parameters
Set /A n=0& Set Param=
for %%A in (%ProcParse%) do Set /A n+=1& if !n! neq 1 (Set Param=!Param!%%A )
Set %4=%Param:~0,-1%
Exit /B
Responding3_for_forum.rar
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
30.10.2015, 22:01 14
oniava, тот давно устарел, через год обновлял, но никуда не выкладывал.
Вот, вытащил с сервера, чуть почистил.

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
@echo off&:: by Alex Dragokas -05.01.13-
COLOR 07
 
:: Start all proccesses, kill not responding proccesses, kill proccess less then defined number of MB RAM.
SetLocal EnableDelayedExpansion EnableExtensions
 
Echo.& Echo.
Echo Monitor has been started.&Echo.
 
::Path to process
Set Path1=l:\Bash\Not Responding\1\test.exe
Set Path2=l:\Bash\Not Responding\2\test2.exe
 
::Parameters for the server
Set Args1=+set sv_config server_1.cfg
Set Args2=+set sv_config server_2.cfg
 
::Delay (sec.) before the next check
Set /A DelayNewCheck=6
 
::Delay (sec.) before starting a process after shutting down because of "not responding" status
Set DelayStartProcess=4
 
::Setting Priority of Application to Run with (1 to 6):
::1 - LOW, 2 - BELOWNORMAL, 3 - NORMAL, 4 - ABOVENORMAL, 5 - HIGH, 6 - REALTIME
Set Priority=3
 
::Start the process in Minimize mode? (1 - Yes, 2 - No)
Set Minimize=2
 
::Count of Memory Checks before closing the application
Set MemoryChecks=10
 
::Set Delay before each memory check (sec.)
Set MemoryDelay=3
 
::Count of KBytes that application need to use after 3 + %MemDelay% sec. of new launchings.
Set MinMemory=1000
 
::How many times we make a series of chekings (during %BugTime%)
Set /A BugChecks=12
 
::Set Delay for each bug check (ms.)
Set BugCheckDelay=3
 
 
 
Call :PriorityEnum %Priority% Priority
if %Minimize%==1 (set Minimize=/MIN ) else (set Minimize=)
 
:begin
for /L %%X in (1,1,20) do if Defined Path%%X For %%A in ("!Path%%X!") do call :WatchSingleProcess "%%~nxA"
Call :Delay %DelayNewCheck%
Goto :begin
 
 
:WatchSingleProcess %1-Name_of_Process
Set Process=%~1
Set PID=
Call :IsResponding "%Process%"
Set PID=%errorlevel%
if "%PID%" neq "0" (
  Call :GetProcessInfo "%PID%" "%Process%" ProcessPath Param
  set HH=!time:~0,2!
  Set MM=!time:~-8,2!
  Set SS=!time:~-5,2!
  if "!HH:~0,1!"==" " set HH=0!HH:~1,1!
  Set myTime=!HH!:!MM!
  Echo %DATE%   !myTime!
  <nul set /p "test=Found Bug in %Process% PID=%PID% %ProcessPath%" 
  for /L %%C in (1,1,%BugChecks%) do (
    Call :IsResponding "%Process%" "%PID%"
    if !errorlevel! neq 0 (
        <nul set /p test=.
        if %%C==%BugChecks% (Call :Restart "%PID%" "%Process%"& Exit /B)
        Call :Delay %BugCheckDelay%
      ) else (
        Echo Waked up
        Goto :MemoryCheckLabel
    )
  )
)
:MemoryCheckLabel
Set PID=
Call :CheckMemory "%Process%"
Set PID=%errorlevel%
if "%PID%" neq "0" (
  Call :GetProcessInfo "%PID%" "%Process%" ProcessPath Param
  rem <nul set /p test=
  set HH=!time:~0,2!
  Set MM=!time:~-8,2!
  Set SS=!time:~-5,2!
  if "!HH:~0,1!"==" " set HH=0!HH:~1,1!
  Set myTime=!HH!:!MM!
  Echo.
  Echo !DATE!   !myTime!
  Echo Found low memory loading in %Process% PID=%PID% %ProcessPath% 
  for /L %%C in (1,1,%MemoryChecks%) do (
    Call :CheckMemory "%Process%" "%PID%"
    if !errorlevel! neq 0 (
        rem <nul set /p test=.
        if %%C==%MemoryChecks% (Call :Restart "%PID%" "%Process%"& Exit /B)
        Call :Delay %MemoryDelay%
      ) else (
        Echo Memory ok
        Exit /B
    )
  )
)
:IsAllProcessRunned
::Get path for all runned iw5mp_server processes
for /L %%X in (1,1,20) do (
  if Defined Path%%X (
    for /f "tokens=1* delims==" %%A in (
      'wmic path win32_process where ExecutablePath^="!Path%%X:\=\\!" get name /value 2^>^&1^|find /i "No Instance"') do (
         Call :StartServer "!Path%%X!" "!Args%%X!"
    )
  )
)
call :Delay 1
exit /B
 
:IsResponding %1-ProcessName %2-Optional_PID
::Set PID Filter when we enter the bug-awaiting stady
Set PID_Filter=
if "%~2" neq "" Set PID_Filter= /FI "PID eq %~2"
For /f "tokens=1,2 delims=," %%A in (
  'tasklist /FI "IMAGENAME eq %~1"%PID_Filter% /FI "STATUS eq NOT RESPONDING" /FO CSV /NH') do (
    if /i "%%~A"=="%~1" Exit /B %%~B
)
Exit /B 0
 
:Restart %1-Proccess_PID %2-Process_Name
Call :GetProcessInfo "%~1" "%~2" ProcessPath Param
taskkill /T /F /PID %~1
Echo ShutDown Server PID=%~1
Call :Delay %DelayStartProcess%
if "%ProcessPath%" neq "" Call :StartServer "%ProcessPath%\%~2" "%Param%"
Exit /B
 
:StartServer %1-ProcessPath %2-Param
For %%A in ("%~1") do start "" /d "%%~dpA" %Minimize%/%Priority% "%~1" %~2
Echo.
Echo %DATE% %TIME%
Echo %~1 %~2 started.
exit /B
 
:CheckMemory %1-Process_Name %2-Proccess_PID-Optional
::Set PID Filter when we enter the bug-awaiting stady
Set PID_Filter=
if "%~2" neq "" Set PID_Filter= /FI "PID eq %~2"
For /f "tokens=1,2,3,4* delims=," %%A in (
  'tasklist /FI "IMAGENAME eq %~1"%PID_Filter% /FI "MEMUSAGE lt %MinMemory%" /FO CSV /NH') do (
    if /i "%%~A"=="%~1" (
      if "%~2" neq "" (Echo PID=%~2 Memory=%%E) else (Echo Begin Check PID=%%~B Memory=%%E)
      Exit /B %%~B
    )
)
Exit /B 0
 
:PriorityEnum %1-Constant %2-var.name
if %~1==1 Set %~2=LOW
if %~1==2 Set %~2=BELOWNORMAL
if %~1==3 Set %~2=NORMAL
if %~1==4 Set %~2=ABOVENORMAL
if %~1==5 Set %~2=HIGH
if %~1==6 Set %~2=REALTIME
Exit /B
 
:GetProcessInfo %1-Proccess_PID %2-Process_Name %3-var.Process_Path %4-var.Process_Parameters
set %~3=
::Getting the Process' Path and Parameters
for /f "tokens=1* delims==" %%A in (
  'wmic path win32_process where ^(ProcessID^=%~1 and name^="%~2"^) get "CommandLine"^,"ExecutablePath" /value^|findstr /BC:"CommandLine" /C:"ExecutablePath"') do (
  if "%%A"=="CommandLine" Set "ProcParse=%%B"
  if "%%A"=="ExecutablePath" Set "ProcessPath=%%~dpB"
)
if "%ProcessPath%" neq "" Set "%3=%ProcessPath:~0,-1%"
::Parse Parameters
Set /A n=0& Set Param=
for %%A in (%ProcParse%) do Set /A n+=1& if !n! neq 1 (Set "Param=!Param!%%A ")
Set "%4=%Param:~0,-1%"
Exit /B
 
:Delay %1-sec.
ping 127.1 -n %~1 > nul
Exit /B
2
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
30.10.2015, 22:02 15
А какие в нем изменения?
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
30.10.2015, 22:02 16
Программа натравки скрипта.
Вложения
Тип файла: rar test.rar (2.4 Кб, 117 просмотров)
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
30.10.2015, 22:05 17
oniava, исправлены баги,
добавлена возможность следить за несколькими процессами (каждому можно задать свои аргументы запуска),
добавлена возможность тушить процессы, которые не набрали достоточного кол-ва ОЗУ (переменная MinMemory),
время в консоль, больше визуализации.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
30.10.2015, 22:07 18
Отслеживание зависания (состояния "не отвечает") программы и её перезапуск

Не работает.
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
30.10.2015, 22:28 19
Читайте, что написано.

Добавлено через 44 секунды
Как же оно будет работать, если Вы не подстроили под себя.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
30.10.2015, 22:30 20
Разобрался Алекс.
Вопросик один остался, где и как дописать, что бы перед новым запуском приложения, сначала удалялись строки из файла links_skipped.txt, а уже потом запускалось приложение.

И будет просто супер!!!
0
30.10.2015, 22:30
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2015, 22:30
Помогаю со студенческими работами здесь

Отслеживание состояния страницы
Здравствуйте! Хочу обратится к вам с проблемой! Пишу WebServise, c аудитом... Стартовая странница...

Отслеживание состояния <select>
Как при изменении состояния &lt;select&gt; переслать на другую страницу? (для каждого option`a отдельно)

Отслеживание состояния WebBrowser
Добрый день всем. Воюю с контролом System.Windows.Forms.WebBrowser. После загрузки страницы...

Отслеживание состояния msinet.ocx
прочел статью В.Сизова &quot;Как применять FTP в документах Microsoft Office&quot; По мотивам написал...

Запретить отслеживание состояния окна
Привет. Вопрос общего характера, но касается Javascript. Есть сайт на котором я раз в 30 секунд ...

Отслеживание изменения состояния службы
7. Служба отслеживает изменения состояния (приостановка, запуск, остановка) заданной службы и...

Отслеживание состояния запущенного процесса
Здравствуйте. запускаю кнопкой выполнение программы: protected void Button3_Click(object...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru