# 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 18:14:53] PROMOTE Game.exe (PID 4321) RSS=5.8GB, NORMAL -> HIGH [04.10.2026 18:14:53] GAME Browser.exe (PID 5678) RSS=740MB, HIGH -> IDLE [04.10.2026 18:14:53] BLOCK svchost.exe (PID 1448): IDLE: OpenProcess(1448) failed: Access is denied. (повторов не будет) [04.10.2026 18:14:53] SKIP System (PID 4): ... (повторов не будет) ``` Режим `-dry-run` помечает строки `[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 ./... ```