nice и renice: приоритеты процессов в Linux

Linux позволяет запускать множество процессов одновременно. Иногда тяжёлый процесс замедляет систему. Вместо того чтобы завершать его, можно «перенести на задний план» — понизить ему приоритет. Для этого в Unix-подобных системах есть утилита nice.
Что такое nice и как он работает
Nice — это утилита для управления приоритетом CPU-планирования процесса. В GNU-реализации диапазон nice-чисел от -20 (максимальный приоритет) до 19 (минимальный приоритет). Чем больше число, тем менее «жадный» к CPU процесс.
Определения в одну строку:
- nice-число (NI): целое значение приоритета процесса, видимое в столбце NI в top/htop.
- PID: идентификатор процесса (Process ID).
Важно: nice влияет только на планирование CPU. Он не ограничивает использование диска, сети или памяти.
Где увидеть nice-число
В утилитах мониторинга NI отображает текущее nice-число процесса:
Запуск процесса с пониженным приоритетом
По умолчанию процессы, запускаемые «обычно», имеют nice 0. Если вы хотите запустить процесс с более низким приоритетом, используйте nice.
Простейшая команда:
which niceПроверка того, какая версия есть в системе (GNU или встроенная в оболочку). Пример запуска с дефолтным понижением (обычно nice=10):
nice processnameГде processname — команда или скрипт. Для явной установки нужного nice-числа используйте -n:
nice -n 19 processnameЗдесь 19 — наименьший приоритет (процесс будет «вежливо» ждать свободного CPU).
Примечание
Если вы запускаете GUI-приложение, будьте осторожны: понижение приоритета может сделать интерфейс менее отзывчивым, если сам GUI-процесс подвергнется изменениям.
Изменение приоритета у уже запущенного процесса: renice
Если процесс уже работает, используйте renice. Сначала найдите PID через ps, top или htop, затем выполните команду:
renice priority PIDГде priority — желаемое nice-число. Альтернативно, флаг -n задаёт смещение (инкремент):
sudo renice -n -2 PIDЭта команда уменьшит nice-число на 2, то есть повысит приоритет процесса. Заметьте, повышать приоритет (уменьшать число) для чужих процессов может только root.
Для изменения приоритетов всех процессов пользователя используйте -u:
renice priority -u usernameИли с sudo для пользователя:
sudo renice -n 5 -u aliceКогда nice/renice не помогут (контрпример)
- Процесс узко зависит от диска (I/O-bound). В этом случае он ждёт ввода-вывода, и пониженный nice не ускорит другую работу. Для таких задач лучше ionice или настройка I/O-квот.
- Если в вашей системе один пользователь запускает несколько тяжёлых задач и они все в одинаковом nice — общий эффект минимален.
- Для лимитов ресурсов, безопасности и обеспечения QoS на уровне сервисов лучше использовать cgroups или systemd slices.
Альтернативные подходы и дополнения
- ionice — управление приоритетом операций ввода-вывода.
- cgroups (control groups) — жёсткие лимиты CPU, памяти и I/O для наборов процессов.
- systemd slices — декларативное ограничение ресурсов для сервисов systemd.
- cpulimit — ограничивает процент CPU, который может использовать процесс.
- taskset — фиксирует процесс на наборе CPU (affinity).
Выбор зависит от цели: плавность интерфейса, ограничение фоновых задач или строгие квоты для контейнеров.
Шпаргалка: полезные команды
# проверить путь до утилиты nice
which nice
# запустить команду с дефолтным понижением (обычно nice=10)
nice long-running-command
# установить конкретное nice-число
nice -n 19 long-running-command
# найти PID процесса по имени
ps aux | grep processname
# изменить nice-число по PID
renice 10 12345
# изменить на относительное значение (потребуется sudo для повышения)
sudo renice -n -2 12345
# изменить приоритет для всех процессов пользователя
renice 5 -u username
# посмотреть процессы и столбец NI
top
htopSOP: как понизить приоритет длительной фоновой задачи (короткий план)
- Найдите команду, которую нужно «осадить». Если она ещё не запущена — перезапустите через nice.
- Для нового процесса: run -> nice -n 19 process.
- Для уже запущенного: найдите PID (ps/top/htop) и выполните renice с sudo при необходимости.
- Проверяйте NI в htop или top.
- Если проблема — I/O, примените ionice или cgroups.
Важно: документируйте изменения, если меняете приоритеты для процессов в продакшене.
Безопасность и права
- Только superuser может повысить приоритет (уменьшить nice-число) чужого процесса.
- Не доверяйте случайным скриптам, которые изменяют приоритеты системных процессов.
- В многопользовательской среде согласуйте изменение приоритетов с политиками группы.
Критерии приёмки
- Процесс запущен с нужным nice-числом (проверено в NI).
- Общая отзывчивость системы не ухудшилась.
- Изменения задокументированы и, при необходимости, выполнены с sudo.
Быстрый факт-бокс
- Диапазон nice (GNU): -20 … 19
- По умолчанию при запуске через nice чаще всего используется nice=10
- Только root может уменьшать значение nice (< 0) для чужих процессов
Краткое резюме
Используйте nice для «вежливого» фонового выполнения долгих задач и renice, чтобы подправить приоритет уже работающих процессов. Для ограничений ввода-вывода или жёстких квот применяйте ionice и cgroups. Всегда учитывайте, что nice влияет только на планирование CPU.
Итог: nice/renice — простые и эффективные инструменты для улучшения общей отзывчивости системы при одновременной работе тяжёлых задач.
Похожие материалы
Как сэкономить на Audible — проверенные способы
Как включить макросы в Excel — безопасно
Плавающее видео в Edge на iPhone и iPad
Отключить Antimalware Service Executable в Windows
Изменение размера значков в Windows 10