autoPriority

Тихая Windows-утилита: назначает приоритеты процессам по расходу оперативной памяти. Один файл main.go собирается в один EXE без установки, службы, иконок и сторонних модулей. Программа не показывает окон и значков — только процесс в диспетчере задач и строки в журнале.

Запуск

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. При каждом запуске файл очищается. Шапка подгоняется под самую длинную строку. Порядок групп строгий: ПРИОРИТЕТ ПОВЫШЕН -> ПРИОРИТЕТ ПОНИЖЕН -> ОШИБКА ЧТЕНИЯ -> ОШИБКА ЗАПИСИ. Пустой скан ничего не пишет.

┌─ 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 или в блоклисте). Выключение режима — секция ИГРОВОЙ РЕЖИМ ВЫКЛЮЧЁН — восстановление, восстановленные процессы идут в повышении/понижении как обычно.

Запуск программы оформлен отдельным боксом ЗАПУСК:

┌─ 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. Скрытый вариант без окна:

go build -trimpath -buildvcs=false -ldflags="-H=windowsgui -s -w -buildid=" -o autoPriority.exe .

Консольный вариант для отладки: уберите -H=windowsgui. Проверка:

go vet ./...
S
Description
A program that automatically sets a high priority for game processes
Readme
195 KiB
1 Watchers 0 Forks
2.0
Latest
2026-07-02 10:39:02 +03:00
Languages
Go 100%