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

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

Ответить
Настройки темы
Любой язык - Поставить юзверя на "паузу"

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


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

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


Изменения
Автор: vombat2
Дата: 12-12-2019
Всем привет.
Идея возникла из обсуждения http://forum.ixbt.com/topic.cgi?id=22:91540:294#294. Я там под ником cheloyekus
Можно ли сделать скрипт, чтобы при выходе из пользователя (смене) все его процессы ставились на "паузу" и выгружались из памяти, а при входе "размораживались"?

Отправлено: 21:56, 10-12-2019

 

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


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

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


Так можно "притормозить" все процессы "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", закинутая в системный каталог
Вопрос с выгрузкой из памяти остается открытым..

Последний раз редактировалось vombat2, 23-12-2019 в 11:31.


Отправлено: 08:31, 16-12-2019 | #21



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

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


Ветеран


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

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


Цитата vombat2:
Вопрос с выгрузкой из памяти остается открытым.. »
Закрытым, коллега, закрытым. Вы никак не можете на это повлиять. Что бы не рекламировали многочисленные «оптимизаторы памяти».

Как только у какого-то приложения возникнут обширные потребности в памяти (при нехватке последней), так сразу страницы памяти, занятые suspended-процессом, начнут активно сбрасываться в файл подкачки.

Отправлено: 17:37, 16-12-2019 | #22


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


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

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


Цитата Iska:
Как только у какого-то приложения возникнут обширные потребности в памяти (при нехватке последней), так сразу страницы памяти, занятые suspended-процессом, начнут активно сбрасываться в файл подкачки. »
Не совсем так "стоящие" процессы совсем неохотно вымещается из памяти, еще момент, могут "проснуться" самовольно. Все бы ни чего если бы их выгрузить, но в дело в новь вмешались старые добрые глюки (привет XP), не весть от куда взявшиеся. Не могу понять причину, точнее что влияет (до сего дня их не было). Может быть файл подкачки, который перестал быть непрерывным, после размещения на ssd образа виртуальной машины (6гб) и нескольких новых программ, второй подозреваемый - PrimoCache (уже был ранее уличен во вредительстве), 3 вариант - система, кстати, "sfc /scannow" выявил ошибки..

Последний раз редактировалось vombat2, 17-12-2019 в 03:07.


Отправлено: 03:00, 17-12-2019 | #23


Ветеран


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

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


Цитата vombat2:
Не совсем так "стоящие" процессы совсем неохотно вымещается из памяти »
Охотно, не охотно… Их не спрашивают, вообще-то. Совсем.

Цитата vombat2:
еще момент, могут "проснуться" самовольно. »
Не могут. Они не исполняются в данный момент. Они «заморожены». Понимаете? Не исполняется никакого их кода, который мог бы в теории их «пробудить». Только какой-либо иной процесс сие может делать.

Отправлено: 03:08, 17-12-2019 | #24


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


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

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


Изображения
Тип файла: png Снимок.PNG
(92.4 Kb, 5 просмотров)

Цитата Iska:
Охотно, не охотно… Их не спрашивают, вообще-то. Совсем. »
То что вы описываете, это похоже на поведение системы в Win7, если приостановить какие-то "емкие" процессы и затем выгрузить их из памяти. И да, кстати, они выгружаются, Руссинович не даст соврать, и там также все стабильно работает как в Win8 (по крайне мере на момент моей предыдущей проверки), но работает несколько по иному - после выгрузки процессов из памяти, образуется некая отдельная область "модифицированной" памяти (см. вложение), которая при "разморозке" возвращается опять процессам, в противном случае может уменьшиться при "возрастающих потребностях", то беж выгружаться


Цитата:
Не могут. Они не исполняются в данный момент. Они «заморожены». Понимаете? Не исполняется никакого их кода, который мог бы в теории их «пробудить». Только какой-либо иной процесс сие может делать.
А кто их знает, можеть они как индийские йоги, которые сами входют и выходят из состояния "соммадхи"!

Отправлено: 06:01, 17-12-2019 | #25


Ветеран


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

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


Коллега, Вы можете верить во что угодно, дело Ваше. Что же до Руссиновича и «некоей отдельной области "модифицированной" памяти», то я лично предпочитаю этого: RAMMap - Windows Sysinternals | Microsoft Docs, этого: Troubleshooting with the Windows Sysinternals Tools - Mark E. Russinovich, Aaron Margosis - Google Книги, этого: Windows Sysinternals Administrator's Reference - Aaron Margosis, Mark E. Russinovich - Google Книги и этого: Windows Internals - Mark E. Russinovich, David A. Solomon, Alex Ionescu - Google Книги Руссиновича — тому.

Отправлено: 17:15, 17-12-2019 | #26


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


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

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


Докумекал более-менее презентабельный вариант сей задумки. Подсказали на Руборде прожку 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..

Последний раз редактировалось vombat2, 25-12-2019 в 16:08.


Отправлено: 14:23, 25-12-2019 | #27



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - Как поставить "приоритет" на интернет в играх? Fufel1337 Сетевые технологии 3 13-01-2017 20:13
Debian/Ubuntu - Куда поставить Ubuntu - "ЗА" и "ПРОТИВ" vovikrus Общий по Linux 8 23-03-2014 07:45
[решено] При открытие "vk.com", "выкидывает" на страницу для "разморозки страницы" sovenok Лечение систем от вредоносных программ 17 21-11-2013 04:09
"Чёрный экран или как поставить дрова на видеокарту ?!" poxer_face_nizza@vk Видеокарты 2 22-09-2013 17:56
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход