Показать полную графическую версию : Поставить юзверя на "паузу"
Так можно "притормозить" все процессы "chrome.exe" пользователя "user":
tasklist /FI "username eq user" | findstr /i "chrome.exe" > userlist.txt
for /F "TOKENS=2" %a in ('type userlist.txt') do (pssuspend %a)
Разморозить:
for /F "TOKENS=2" %a in ('type userlist.txt') do (pssuspend -r %a)
Не знаю насколько правильно, просто подсмотрел данный метод отбора на одном форуме. Поскольку в текствоый файл вноситятся не только названия процессов и их "пиды", может быть так, что переменная %а совпадет не с пидом, а с размером процесса и стопарнется какой-нибудь нужный процесс, а так х.з.
Для заморозки используется русиновичевская "PsSuspend", закинутая в системный каталог
Вопрос с выгрузкой из памяти остается открытым..
Вопрос с выгрузкой из памяти остается открытым.. »
Закрытым, коллега, закрытым. Вы никак не можете на это повлиять. Что бы не рекламировали многочисленные «оптимизаторы памяти».
Как только у какого-то приложения возникнут обширные потребности в памяти (при нехватке последней), так сразу страницы памяти, занятые suspended-процессом, начнут активно сбрасываться в файл подкачки.
Как только у какого-то приложения возникнут обширные потребности в памяти (при нехватке последней), так сразу страницы памяти, занятые suspended-процессом, начнут активно сбрасываться в файл подкачки. »Не совсем так "стоящие" процессы совсем неохотно вымещается из памяти, еще момент, могут "проснуться" самовольно. Все бы ни чего если бы их выгрузить, но в дело в новь вмешались старые добрые глюки (привет XP), не весть от куда взявшиеся. Не могу понять причину, точнее что влияет (до сего дня их не было). Может быть файл подкачки, который перестал быть непрерывным, после размещения на ssd образа виртуальной машины (6гб) и нескольких новых программ, второй подозреваемый - PrimoCache (уже был ранее уличен во вредительстве), 3 вариант - система, кстати, "sfc /scannow" выявил ошибки..
Не совсем так "стоящие" процессы совсем неохотно вымещается из памяти »
Охотно, не охотно… Их не спрашивают, вообще-то. Совсем.
еще момент, могут "проснуться" самовольно. »
Не могут. Они не исполняются в данный момент. Они «заморожены». Понимаете? Не исполняется никакого их кода, который мог бы в теории их «пробудить». Только какой-либо иной процесс сие может делать.
Охотно, не охотно… Их не спрашивают, вообще-то. Совсем. »То что вы описываете, это похоже на поведение системы в Win7, если приостановить какие-то "емкие" процессы и затем выгрузить их из памяти. И да, кстати, они выгружаются, Руссинович не даст соврать, и там также все стабильно работает как в Win8 (по крайне мере на момент моей предыдущей проверки), но работает несколько по иному - после выгрузки процессов из памяти, образуется некая отдельная область "модифицированной" памяти (см. вложение), которая при "разморозке" возвращается опять процессам, в противном случае может уменьшиться при "возрастающих потребностях", то беж выгружаться
Не могут. Они не исполняются в данный момент. Они «заморожены». Понимаете? Не исполняется никакого их кода, который мог бы в теории их «пробудить». Только какой-либо иной процесс сие может делать.А кто их знает, можеть они как индийские йоги, которые сами входют и выходят из состояния "соммадхи"! :)
Коллега, Вы можете верить во что угодно, дело Ваше. Что же до Руссиновича и «некоей отдельной области "модифицированной" памяти», то я лично предпочитаю этого: RAMMap - Windows Sysinternals | Microsoft Docs (https://docs.microsoft.com/en-us/sysinternals/downloads/rammap), этого: Troubleshooting with the Windows Sysinternals Tools - Mark E. Russinovich, Aaron Margosis - Google Книги (https://books.google.ru/books?id=YQ86DQAAQBAJ&pg=PT713&lpg=PT713&source=bl&ots=W0VFvWNIyk&sig=ACfU3U3eoA_gVMq9aDu3DR2i4PDGUBrrqQ&hl=ru&sa=X&ved=2ahUKEwis5fK_67zmAhVriYsKHSlDDxIQ6AEwDHoECAcQBA#v=onepage&q&f=false), этого: Windows Sysinternals Administrator's Reference - Aaron Margosis, Mark E. Russinovich - Google Книги (https://books.google.ru/books?id=0KZCAwAAQBAJ&pg=PT578&lpg=PT578&source=bl&ots=lMsktKky60&sig=ACfU3U1llbxOZy6BVEiIXNT35WHGsk3gcA&hl=ru&sa=X&ved=2ahUKEwis5fK_67zmAhVriYsKHSlDDxIQ6AEwDXoECAgQBA#v=onepage&q&f=false) и этого: Windows Internals - Mark E. Russinovich, David A. Solomon, Alex Ionescu - Google Книги (https://books.google.ru/books?id=3rdCAwAAQBAJ&pg=PA412&lpg=PA412&source=bl&ots=d8xuCvduvE&sig=ACfU3U3D-G2aomE-sPZ64nHlI7dpKvoboA&hl=ru&sa=X&ved=2ahUKEwis5fK_67zmAhVriYsKHSlDDxIQ6AEwEXoECAkQBA#v=onepage&q&f=false) Руссиновича — тому.
Докумекал более-менее презентабельный вариант сей задумки. Подсказали на Руборде прожку EmptyStandbyList (от автора все того же Process Hacker'а), позволяющую выгружать все "workingsets" из памяти - не совсем то, но тоже пойдет для данного случая (EmptyStandbyList workingsets). Что в итоге - 2 скрипта (для засыпания и пробуждения юзера) и программки PsSuspend, EmptyStandbyList. Проги нужно закинуть в system32.
SuspendUser.bat
::Заморозка всех процессов текущего пользователя в текущей сессии, за исключением тех, которые могут вызвать глюки или тормоза (explorer, taskhost и т.д.)
for /f "tokens=2 delims=," %%a in ('tasklist/fi "USERNAME eq %username%" /fi "SESSIONNAME eq Console" /nh /fo csv^|findstr/i /v "explorer taskhost conhost cmd etd"') do pssuspend %%a
::Включение запланированной задачи "разморозки" процессов при разблокировке сеанса пользователя
SCHTASKS /Change /TN "Resume%username%" /enable
::Выход в "окно блокировки"
RunDll32 user32.dll,LockWorkStation
::Освобождение памяти
SCHTASKS /Run /TN EmptyWS
ResumeUser.bat
for /f "tokens=2 delims=," %%a in ('tasklist/fi "USERNAME eq %username%" /fi "sessionname eq console" /nh /fo csv^|findstr/i /v "explorer taskhost conhost cmd etd"') do pssuspend -r %%a
::Отключение запланирванной задачи "разморозки", чтобы не срабатывала в пустую
SCHTASKS /Change /TN "Resume%username%" /disable
Далее нужно создать задачу в планировщике задач под именем Resume"Имя пользователя", триггер - "при разблокировке рабочей станции", в действии указать скрипт ResumeUser.bat.
Затем нужно открыть планировщик (taskschd.msc) под админом, и создать там задачу под именем "EmptyWS", без триггеров, в действии указать "EmptyStandbyList.exe", параметр "workingsets". После нужно файлу этой задачи (в папке C:\Windows\System32\Tasks) в совйствах безопасности добавить доступ для группы "пользователи".
Задача "EmptyWS" нужна для запуска "EmptyStandbyList workingsets" с админскими правами под обычным пользвателем.
Далее выносим ярлык SuspendUser.bat на рабочий стол, запускать, лучше со свернутыми окнами.
У меня работает (на Win 8.1, Win7) почти без глюков, за исключением некоторых приложений. Автокад "падает" после таких манипуляций, хотя многие программы спокойно "засыпают" и "просыпаются" - браузеры, Google Earth, игра Dirt4..
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.