# autoPriority Тихая Windows-утилита: назначает приоритеты процессам по расходу оперативной памяти. Один файл `main.go` собирается в один EXE без установки, службы, иконок и сторонних модулей. Программа не показывает окон и значков — только процесс в диспетчере задач и строки в журнале. ## Запуск ```text autoPriority.exe autoPriority.exe -mem=1G -game-mem=4G -interval=30s autoPriority.exe -game-mem=0 autoPriority.exe -dry-run ``` | Флаг | По умолчанию | Описание | |---|---|---| | `-mem` | `512M` | Обычный порог памяти: положительное целое число с суффиксом K/M/G | | `-game-mem` | `2G` | Порог тяжёлого режима: больше `-mem`; `0` отключает режим | | `-interval` | `1m` | Интервал проверок; меньше 10 секунд ограничивается 10 секундами | | `-dry-run` | `false` | Только запись плана в журнал без изменения приоритетов | Первая проверка выполняется при запуске, дальше — по интервалу. В одном сеансе Windows работает один экземпляр; повторный запуск завершается, не трогая работающий. Программа не настраивает автозапуск и не запрашивает повышение прав. Остановка — завершением процесса в диспетчере задач или сигналом. При штатном завершении по Ctrl+C / SIGTERM программа один раз восстанавливает собственные изменения. Принудительное завершение восстановления не гарантирует. ## Как назначаются приоритеты Порог применяется к рабочему набору процесса (RSS). | Условие | Приоритет | |---|---| | RSS не меньше `-mem` | HIGH | | RSS меньше `-mem`, текущий приоритет выше NORMAL | NORMAL | | RSS меньше `-mem`, приоритет NORMAL, BELOW_NORMAL или IDLE | Без изменения | | Процесс достиг `-game-mem` | HIGH, остальным IDLE | `-game-mem` — просто порог, не распознавание игр: режим может включить любой тяжёлый процесс. Участник остаётся в режиме до завершения, даже если расход памяти упал. После выхода последнего участника временное понижение снимается и применяются обычные правила. При выходе самой программы восстанавливаются её собственные изменения. Чужое изменение приоритета становится новой исходной точкой, а не перезаписывается. После отказа процесс попадает в блоклист в памяти: повторных попыток нет, остальные обрабатываются независимо. Блоклист очищается при перезапуске. Запись снимается, если PID исчез или его занял другой экземпляр. ## Журнал События одного скана выводятся боксом во временной папке Windows: **`%TEMP%\autopriority.log`**. При каждом запуске файл очищается. Шапка подгоняется под самую длинную строку. Порядок групп строгий: ПРИОРИТЕТ ПОВЫШЕН -> ПРИОРИТЕТ ПОНИЖЕН -> ОШИБКА ЧТЕНИЯ -> ОШИБКА ЗАПИСИ. Пустой скан ничего не пишет. ```text ┌─ 04.10.2026 20:19:15 ──────────────────────────────────────────────────┐ ├ ИГРОВОЙ РЕЖИМ ВКЛЮЧЁН — EoCApp.exe (PID 6200) RSS=2.2GB, NORMAL -> HIGH│ │ │ ├ ПРИОРИТЕТ ПОНИЖЕН │ │ ├ Hermes.exe (PID 10220) RSS=166MB, ABOVE_NORMAL -> IDLE │ │ └ librewolf.exe (PID 6216) RSS=524MB, HIGH -> IDLE │ │ │ ├ ОШИБКА ЧТЕНИЯ │ │ └ csrss.exe (PID 524): OpenProcess(524) failed: Access is denied. │ │ │ ├ ОШИБКА ЗАПИСИ │ │ └ winlogon.exe (PID 792): OpenProcess(792) failed: Access is denied. │ └────────────────────────────────────────────────────────────────────────┘ ``` Триггер игрового режима не дублируется в повышении: его исход уже вписан в строку `ИГРОВОЙ РЕЖИМ ВКЛЮЧЁН` (`NORMAL -> HIGH`, `уже HIGH` или `в блоклисте`). Выключение режима — секция `ИГРОВОЙ РЕЖИМ ВЫКЛЮЧЁН — восстановление`, восстановленные процессы идут в повышении/понижении как обычно. Запуск программы оформлен отдельным боксом ЗАПУСК: ```text ┌─ 04.10.2026 19:58:36 ──────────────────────────────────────────────┐ ├ ЗАПУСК │ │ ├ запущен (mem=512MB, game-mem=2.0GB, interval=1m0s, dry-run=false)│ │ └ собственный приоритет: IDLE │ └────────────────────────────────────────────────────────────────────┘ ``` Боксы разделены пустой строкой. Режим `-dry-run` помечает строки `(план)`. ## Ограничения - Windows может запретить чтение или изменение приоритета — программа пишет строку в журнал и больше не трогает процесс. - Восстановление выполняется один раз; о невосстановленном сообщается в журнале. - Наследованный дочерними процессами IDLE определяется по родству и времени создания. Это эвристика. - Программа не обходит защиту процессов и не гарантирует совместимость с античитом. ## Сборка Нужны Windows и Go 1.26 или новее, без сторонних модулей и CGO. Скрытый вариант без окна: ```text go build -trimpath -buildvcs=false -ldflags="-H=windowsgui -s -w -buildid=" -o autoPriority.exe . ``` Консольный вариант для отладки: уберите `-H=windowsgui`. Проверка: ```text go vet ./... ```