Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Bat для запуска приложения при падении нагрузки ЦП другого процесса

Ответить
Настройки темы
CMD/BAT - Bat для запуска приложения при падении нагрузки ЦП другого процесса

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Суть вопроса: есть батник запуска приложения
Код: Выделить весь код
@echo off

start /d"C:\Program Files%\программа\1.1.0\программа.exe"
Нужно сделать чтобы при падении нагрузки ЦП на условный "процесс" менее 40%, программа стартовала заново. Знаю только как сделать при закрытии процесса
Код: Выделить весь код
:proverka
tasklist | find "процесс.exe"

if %ERRORLEVEL% EQU 1 goto restart
if %ERRORLEVEL% EQU 0 goto vremya   на какую команду заменить перечеркнутые переменные??

:vremya
timeout 3
goto proverka

:restart
start /d"C:\Program Files%\программа\1.1.0\программа.exe" 
goto proverka
, а при снижении нагрузки никак найти не могу. Прошу прощения если дубль

Отправлено: 10:39, 04-06-2019

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Это надо?
Перезапуск процесса, если потребляет менее 40Мб памяти
Код: Выделить весь код
@echo off
set "pr=programma.exe"
set "mb=40000"

cmd /c for /l %%# in () do tasklist /fi "imagename eq %pr%" /fi "memusage lt %mb%"^&^& (^>nul 2^>^&1 taskkill /f /im "%pr%"^& start "" "%pr%"^& exit /b)^& ^>nul timeout /t 1 /nobreak
pause

Отправлено: 13:49, 04-06-2019 | #2



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

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


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


нет, не это. Либо нагрузка процесса на ЦП, либо общая загрузка ЦП

Отправлено: 15:21, 04-06-2019 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата lepi4:
нагрузка процесса на ЦП, либо общая загрузка ЦП »
а как выявить точную долю процесса в загрузке ЦП, на каком-то этапе нагрузка этого процесса будет выше чем обычно, но при этом остальные процессы будут иметь очень слабую загрузку или какой-то другой появляющийся процесс может загрузить ЦП выше нужного вам предела, а ваш процесс почти бездействовать. По-моему только памятью и можно оперировать.
вот общий процент загрузки процессора:
Код: Выделить весь код
wmic CPU get LoadPercentage /value
но что это дает, как по этому можно судить в какое время из этого числа именно нужный процесс нагрузил более чем надо?

Последний раз редактировалось alpap, 04-06-2019 в 16:30.


Отправлено: 16:06, 04-06-2019 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Win32_PerfFormattedData_PerfProc_Process (но у меня не работает).

Отправлено: 17:31, 04-06-2019 | #5


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


А не допускаете что процесс может просто не расходовать большое количество оперативной памяти? что 60%ЦП что 1% - расход оперативы 125мб. И как тут лезть с оперативой. Как посмотреть загрузку ЦП, и процесс я знаю. Мне нужно понять как из это сделать переменную IF. Как там будет с остальными процессами и как будет меняться в загрузке это не важно, нужна конкретная задача - запуск приложения при падении нагрузки процессом ЦП ниже 30% (или обще загрузки ЦП ниже 50
Код: Выделить весь код
wmic CPU get LoadPercentage /value
if "LoadPercentage" gtr 24 goto 1
if "LoadPercentage" lss 24 goto 2
как сделать из этого рабочее состояние?

Отправлено: 17:45, 04-06-2019 | #6


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
for /f "delims=" %%a in ('wmic CPU get LoadPercentage /value^|find "="') do set "%%a"
cmd /c for /l %%# in () do (if "%LoadPercentage%" gtr "2" echo Больше)^& ^>nul timeout /t 1 /nobreak
pause& exit
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:56, 04-06-2019 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


powershell:
Код: Выделить весь код
get-counter '\процесс(taskmgr)\% загруженности процессора'|select -exp countersamples|ft InstanceName,CookedValue
Код: Выделить весь код
get-counter '\process(*)\% processor time'|select -exp countersamples|ft InstanceName,CookedValue
- выбор того или иного языка счетчиков зависит от системного языка.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 04-06-2019 в 22:04.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:57, 04-06-2019 | #8


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


YuS_2, в cmd есть typeperf, однако ни alpap, ни вы не берете в расчет один простой нюанс касательно того, что именно подразумевается под нагрузкой ЦП в винде. Попробую объяснить популярно на пальцах. В случае с WMI оснастка возвращает последнее пиковое значение счетчика производительности, последний якобы отображает загрузку процессора в процентах. На деле же так как каждому потоку отпускается определенный квант времени, по истечении которого планировщик очереди потоков принудительно передаст управление потоку, ближе всех стоящему в очереди, логично заключить: счетчик производительности измеряет не загрузку как таковую, это - готовность планировщика предоставить управление потоку по первому требованию (всплески активности возникают при переключении потоков). Счетчики производительности предоставляются системой посредством такой NTAPI'шной функции, как NtQuerySystemInformation, при этом далеко не все из SYSTEM_INFORMATION_CLASS возвращает данные из "низов", это также справедливо и для загрузки ЦП. Иными словами, загрузка ЦП условна, и гарантированно сказать, что к всплеску привело именно такое-то приложение, а не работающее "параллельно", которое, скажем, активно использует системный таймер, невозможно (что не совсем справедливо в случае таких систем как 8.1 и 10).
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:24, 05-06-2019 | #9


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


greg zakharov,
Цитата greg zakharov:
ни вы не берете в расчет один простой нюанс касательно того, что именно подразумевается под нагрузкой ЦП в винде. »
Григорий, вот скажите, а зачем так глубоко копать? Powershell предоставляет инструмент, я его использую...
Код: Выделить весь код
get-counter "\процесс(*)\% загруженности процессора"|
select -exp countersamples|
ft instancename,@{n='CPU';e={($_.cookedvalue/100).tostring('P')}} -auto
по-моему, здесь конкретно написано и даже по-русски:
Цитата:
процесс()
% загруженности процессора
Выдает это:
Код: Выделить весь код
get-counter -ListSet *
в соответствии с документацией.
А что там наворотила микрософт внутри WMI, мне неинтересно. Если что-то чему-то, по какой-то причине не соответствует, то это баг, который должен быть где-то описан и возможно, даже записан в очередь на исправление (что в случае с микрософт весьма сомнительно)

Цитата greg zakharov:
На деле же так как каждому потоку отпускается определенный квант времени, по истечении которого планировщик очереди потоков принудительно передаст управление потоку, ближе всех стоящему в очереди, логично заключить: счетчик производительности измеряет не загрузку как таковую, это - готовность планировщика предоставить управление потоку по первому требованию (всплески активности возникают при переключении потоков). »
Это в теории.
А практически, в официальной документации написано следующее:
Цитата:
Объект "Процесс" создается в момент запуска программы. Все потоки этого процесса используют одно и то же адресное пространство и имеют доступ к одним и тем же данным.
Почему мы не должны верить написанному?


В общем, резюмируем:
Код: Выделить весь код
$process = 'explorer'
get-counter "\процесс($process)\% загруженности процессора" -sam 5 -cont|
select -exp countersamples|%{
	if($_.cookedvalue -lt 1){
		"$process ушел курить"
	}else{"$process весь в работе"}
}
- прерывание скрипта по Ctrl+C
Это всё, что требовалось ТС.
Цитата greg zakharov:
загрузка ЦП условна »
бесспорно, но в данной задаче не требуются атомные точности, если я правильно понял. Такого функционала вполне должно хватить...

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 05-06-2019 в 11:17.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:17, 05-06-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Bat для запуска приложения при падении нагрузки ЦП другого процесса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe) vk_k14m@vk Скриптовые языки администрирования Windows 26 05-06-2018 01:32
Любой язык - Завершение процесса при обнаружении другого процесса infoman1@vk Скриптовые языки администрирования Windows 3 01-02-2018 15:27
Доступ - Скрипт запуска от имени другого пользователя, bat или vbs Farnax Microsoft Windows 7 22 21-09-2017 05:54
Нужно создать bat для запуска сервера с параметрами + приоритет процесса KimShumow Скриптовые языки администрирования Windows 6 19-02-2016 22:23
CMD/BAT - Завершение одного процесса и запуск другого с помощью bat-файла irbis85 Скриптовые языки администрирования Windows 7 26-05-2015 19:19




 
Переход