Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Закрытие процесса при перегрузке процессора (http://forum.oszone.net/showthread.php?t=348974)

1S1N 09-06-2021 18:40 2959845

Закрытие процесса при перегрузке процессора
 
Я в батниках ватник.. На просторах этого форума нашёл следующий код
Код:

@echo off
set file=%temp%\CPU.tmp
wmic cpu get LoadPercentage > %file%
sort /R %file% /O %file%
for /f "skip=1 tokens=1,*" %%q in (%file%) do set cpu=%%q
echo %cpu%
del %file% /Q

Данный код выводит загрузку процессора в процентах. Мне нужно, чтобы проверка процессора происходила раз в 10 секунд и при загрузке процессора больше чем на 80% происходило убийство определенного процесса (taskkill /f /im cmd.exe)

alpap 10-06-2021 01:49 2959877

на загрузку процессора влияет очень много факторов и это не выход из положения, особенно в подобном случае, а именно:
-приведенный код написан на batch и запускается в окне процесса cmd.exe
-если будет перегрузка мы убьем этот процесс и более уже не сможем контролировать ситуацию - приехали
надо смотреть какой ИМЕННО процесс (возможно запускаемый из с помощью cmd.exe) грузит процессор и убивать его или несколько других тяжелых, не особо нужных сейчас, процессов, играть с приоритетами, чистить систему от мусора, особенно фоновые задачи и автозагрузка, может антивирус выключать или заменить, диск может уже почти весь занят или сильно фрагментирован - масса причин.
вот пара кодов на bat, но которые конечно не будут убивать себя. а нацелены на конкретное прожорливое приложение
Код:

:: Перезапуск процесса, если потребляет менее 20Мб памяти
@echo off
set "pr=programma.exe"
set "mb=20000"
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

---
Код:

:: Завершить все одноименные процессы, если сумма занятой ими памяти превышает 120Мб
@echo off
set "spr=calc.exe"
set "sm=120000"

for /f "tokens=2 delims=:" %%a in ('tasklist /fi "imagename eq %spr%" /fo list') do set "m=%%a"
for /f "delims=" %%a in ('"(for %%a in (%m:~0,-3%) do @<nul set /p=%%a)& echo:"') do if %%a gtr %sm% taskkill /f /im %spr%
pause


1S1N 10-06-2021 13:40 2959934

Скорее всего, я не корректно описал задачу. Мне нужно, чтобы при превышении порога загрузки процессора закрывалась определённая программа. В скобках taskkill cmd я написал для примера..

То есть мне нужно:
if загрузка процессора меньше 80%, else ждём 10 секунд и проверяем снова, но if загрузка процессора >80%, то taskkill /f /im %process% и exit

DJ Mogarych 10-06-2021 15:38 2959954

Код:

powershell -command "while ((gcim Win32_Processor).LoadPercentage -le 80) {sleep 10}; (get-process calculator).Kill()"


Время: 23:50.

Время: 23:50.
© OSzone.net 2001-