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

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

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

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


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

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


Изменения
Автор: KaDirZhan
Дата: 28-04-2021
Доброго времени суток!
Подскажите пожалуйста батник который проверяет каждые секунды запущен ли процесс и если например он запущен и занимает больше 150мб памяти в оперативной памяти то дальше выполняются следующие сценарии

Отправлено: 12:44, 28-04-2021

 

Аватара для Elven

Ветеран


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

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


Батниками такое не реализуется (по крайней мере постоянное отслеживание), этим должна заниматься служба. Максимум - можно загнать в шедулер чтобы проверялось каждые n минут, но это такой себе вариант. Проверять можно через tasklist с соответствующими фильтрами (подробнее - здесь), полагаю это будут MEMUSAGE и IMAGENAME.

Отправлено: 13:29, 28-04-2021 | #2



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

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


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


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

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


Если батником не получиться то не беда)

В сети нашел вот такой скрипт поможете переделать под мои нужды?
что бы через tasklist проверял каждые секунды запуск нужного процесса, если найден процесс и занимает 150 мб то, чтоб он не убивал процесс а замораживал, после истечений 5 минут размораживал

Код: Выделить весь код
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery( _
    "Select * From Win32_Process " _
    & "Where Name = 'notepad.exe'")

Killed = False
For Each objProcess In colProcesses
  If objProcess.WorkingSetSize > 6291456 Then
    objProcess.Terminate
    Killed = True
  End If
Next

If Killed Then
  Set objShell = Wscript.CreateObject("Wscript.Shell")
  objShell.Run "notepad.exe"
End If

Отправлено: 13:45, 28-04-2021 | #3


Ветеран


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

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


вот на bat с проверкой каждую секунду (в данном коде при превышении происходит перезапуск этого процесса) и это конечно нагружает процессор и это конечно извращение при наличии сейчас правильных инструментов
Код: Выделить весь код
@echo off
set "pr=programma.exe"
set "mb=150000"

cmd /c for /l %%# in () do tasklist /fi "imagename eq %pr%" /fi "memusage gt %mb%"^&^& (^>nul 2^>^&1 taskkill /f /im "%pr%"^& start "" "%pr%"^& exit /b)^& ^>nul timeout /t 1 /nobreak
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:00, 28-04-2021 | #4


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


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

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


Цитата alpap:
Цитировать »
Проверка не работает, скрип убивает процесс даже с 5 мб

Отправлено: 14:36, 28-04-2021 | #5


Ветеран


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

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


еще три нолика надо дописать чтобы Мб получились
вот на PowerShell, но легче не станет, все равно висящий нагружающий процесс
(как только процесс превысит указанное потребление будет создан файл 'file.txt' в текущей директории, мониторинг - 3сек)
Код: Выделить весь код
While ((Get-Process).where{$_.Name -eq 'Имя процесса' -and $_.WS -le 150000000}) {Start-Sleep -Second 3}
New-Item 'file.txt'
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:43, 28-04-2021 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата alpap:
еще три нолика надо дописать чтобы Мб получились »
Можно просто написать 150MB. ))
И почему -le?
Код: Выделить весь код
if ((Get-Process processname -OutVariable proc) -and $proc.ws -ge 150MB) {"Алярм!"}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 28-04-2021 в 22:46.

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

Отправлено: 22:36, 28-04-2021 | #7


Ветеран


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

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


Цитата DJ Mogarych:
Можно просто написать 150MB »
да как-то ..., можно конечно, потом уже подумал
Цитата DJ Mogarych:
И почему -le »
ну под while для true должно быть не больше иначе он и не почешется
и ..., это же просто условие? Мониторинг надо делать из шедулера, например? Не запускать же скрипт самому каждые там сколько-то секунд?

Последний раз редактировалось alpap, 29-04-2021 в 01:11.


Отправлено: 01:03, 29-04-2021 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Поиск и перезапуск процесса по его занимаемой памяти Max_ma Скриптовые языки администрирования Windows 10 25-10-2017 14:35
Проверка запущенного процесса Anarasius AutoIt 2 25-06-2014 11:39
.NET - как контролировать ход выполнения запущенного процесса RUVATA Программирование и базы данных 3 31-08-2010 14:00
.NET - Получение PID процесса, запущенного из программы Delirium Программирование и базы данных 2 07-12-2009 02:17
Java - Отслеживание состояния запущенного процесса EvgeniyQQQ Программирование и базы данных 15 02-10-2007 13:20




 
Переход