Скрипт на процесс завершения в соответствии с потреблением памяти Windows 10

705
Frankruss

Я ищу пакетный сценарий или сценарий PowerShell, который, если память, используемая процессом, составляет менее 10 МБ, завершает этот процесс и перезапускает его. Я пытался много искать, но не смог найти окончательного решения.

Это скрипт, который я пробовал, но он не работает. Пожалуйста, помогите, спасибо!

:start @ECHO OFF SET procName=iexplorer.exe SET RAMLimit=10240 FOR /F "tokens=*" %%F IN ('tasklist^|findstr %procName%') DO SET foundString=%%F FOR /F "tokens=5" %%F IN ("%foundString%") DO SET RAMConsumption=%%F IF %RAMConsumption% LEQ %RAMLimit% && ping 8.8.8.8 -n 6 | FIND /I "out" if errorlevel 0 ( TASKKILL /IM %procName% ) else ( echo iexplorer is working ) goto start 
0
вы не получите ответ на такой вопрос, потому что superuser не является бесплатным сервисом для написания скриптов. Пожалуйста, покажите нам свое исследование и какие проблемы у вас возникли, тогда мы будем рады помочь. SimonS 5 лет назад 0
Я добавил сценарий, который я попробовал. Спасибо за совет. Frankruss 5 лет назад 1
** Меньше ** чем 10 МБ? Я понимаю желание перезапустить процессы, которые занимают слишком много памяти, но не слишком мало. Что вы пытаетесь решить? Richard 5 лет назад 0

1 ответ на вопрос

1
SimonS

Это было бы решение PowerShell:

Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach { $Path = $_.Path [bool]$Ping = Test-Connection 8.8.8.8 -Quiet if ($Path -and $Ping) { Stop-Process $_ -Force Start-Process $Path } } 

сначала он ищет все iexploreпроцессы, затем фильтрует whereвсе процессы, у которых объем оперативной памяти меньше или равен 10 МБ. Для каждого процесса, который соответствует where, он останавливается и перезапускает процесс

Изменить: похоже, что вы хотите запустить это в бесконечном цикле, если это так, просто оберните ваш сценарий в whileцикл, как это

while ($true) { Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach { $Path = $_.Path [bool]$Ping = Test-Connection 8.8.8.8 -Quiet if ($Path -and $Ping) { Stop-Process $_ -Force Start-Process $Path } } sleep -s 1 } 

если нет пути:

while ($true) { Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach { [bool]$Ping = Test-Connection 8.8.8.8 -Quiet if ($Ping) { Stop-Process $_ -Force Start-Process iexplore } } sleep -s 1 } 
Спасибо, сэр. Большое спасибо. Я почти на месте, но есть некоторая проблема с вашим скриптом. Я хотел бы постоянно проверять процесс, что если память становится меньше 10 МБ, приложение перезапускается. Процесс перезапускается в соответствии с вашим скриптом . но если используемая память больше, чем 10 МБ, чем она застряла. И последнее, сэр, я хочу также добавить условие, которое перезапускает процесс, только если менее 10 МБ и интернет работает. Например, когда этот пинг 8.8.8.8 правда. Я мог бы сделать cmd, но я не знаю mucj = h в powershell. СПАСИБО. Frankruss 5 лет назад 0
@Frankruss Я добавил немного логики, теперь она работает правильно? SimonS 5 лет назад 0
Сэр, спасибо за вашу поддержку. Я хотел, чтобы, если оба условия истинны, т. Е. Память меньше 10 МБ и интернет не работает, то только перезапустите процесс. Логика перезапускает процесс, только если интернет работает, и условие памяти истинно. Но когда я отключаюсь Интернет закрывает процесс, но не перезапускает его снова. СПАСИБО. Frankruss 5 лет назад 0
@Frankruss хорошо, теперь он должен вести себя так, как вы хотите. хотя я не понимал интернет-часть. он будет перезапущен сейчас, если пинг может достигнуть 8.8.8.8. если вы хотите перезапустить, если ping НЕ достигает 8.8.8.8, замените `if ($ Path -and $ Ping)` на `if ($ Path -and! $ Ping)` SimonS 5 лет назад 0
Теперь сценарий даже не перезапускает процесс, независимо от того, работает интернет или нет. Frankruss 5 лет назад 0
@Frankruss для меня это работает отлично. он только что-то делает, если есть / нет интернет-соединения и если у процесса есть свойство Path. если вы запустите `Get-Process iexplore | select Path` путь пустой или нет? если он пуст, вы можете использовать новый, который я вставил в ответ. Я имею в виду, что это довольно тупой сценарий, здесь мало что может пойти не так, если вы реализуете его именно так, как я написал в своем ответе. Вы получаете сообщение об ошибке? SimonS 5 лет назад 0
Спасибо, сэр. Сейчас работает. Frankruss 5 лет назад 1