Как установить приоритеты процесса с помощью nice и renice в Linux

Команды nice и renice позволяют точно настроить то, как ядро ​​обрабатывает ваши процессы, регулируя их приоритеты. Прочтите это руководство, чтобы узнать, как использовать их в Linux и Unix-подобных операционных системах, таких как macOS.

Все дело в процессе

Внутри вашего Linux или Unix-подобного компьютера будет выполняться множество процессов еще до того, как вы запустите приложение, которое хотите использовать. Большинство этих процессов являются жизненно важными элементами самого Linux или вспомогательными процессами для графической среды рабочего стола. За кулисами происходит много всего. Конечно, есть ограниченное количество системных ресурсов и процессорного времени. Ядро Linux является контроллером всех этих процессов.

Именно ядро ​​должно решить, какие процессы привлекают внимание и ресурсы прямо сейчас, а какие должны ждать. Ядро постоянно манипулирует процессами и приоритетами, чтобы гарантировать, что компьютер работает как можно более плавно и что все процессы получают свою соответствующую долю. Некоторые процессы получают льготы. Они настолько важны для общей работы компьютера, что их потребности должны быть важнее, например, вашего браузера.

Хорошая ценность

Одним из критериев, используемых для определения того, как ядро ​​обрабатывает процесс, является значение nice. Каждый процесс имеет свою ценность. Значение nice представляет собой целое число в диапазоне от -19 до 20. Все стандартные процессы запускаются с нулевым значением nice.

  Как использовать команды Linux cat и tac

Уловка здесь в том, что чем выше значение nice, тем лучше ваш процесс для других процессов. Другими словами, высокое значение nice сообщает ядру, что этот процесс готов ждать. Отрицательное число противоположно хорошему. Чем больше отрицательное значение nice, тем более эгоистичным является процесс. Он пытается получить как можно больше процессорного времени, не обращая внимания на другие процессы.

Мы можем использовать команду nice, чтобы установить значение nice, когда процесс запущен и мы можем использовать renice для настройки значения nice текущего процесса.

Хорошая команда

Мы можем использовать команду nice, чтобы настроить значение nice для программы при ее запуске. Это позволяет нам увеличивать или уменьшать приоритет, присвоенный процессу ядром по сравнению с другими процессами.

Предположим, программист написал программу под названием Акерманн. Это вычисляет Функции Акермана. Это интенсивно использует процессор и память. Программист может запустить программу с помощью следующей команды:

./ackermann

команда ackermann в окне терминала

Мы можем использовать команду top для просмотра запущенной программы.

top

топ работает в терминале

Мы можем увидеть детали программы Аккермана вверху. Хорошее значение — это цифра в столбце «NI». Как и следовало ожидать, он установлен на ноль.

Давайте перезапустим его и на этот раз сделаем менее требовательным. Мы установим для программы Аккермана хорошее значение 15 следующим образом. Введите nice, пробел, -15, еще один пробел, а затем название программы, которую вы хотите запустить. В нашем примере наш вымышленный программист использует ./ackermann.

nice -15 ./ackermann

Команда nice 15 в окне терминала

Обратите внимание, «-15» не отрицательные пятнадцать. Положительно пятнадцать. Знак «-» необходим для того, чтобы приятно сообщить, что мы передаем параметр. Чтобы указать отрицательное число, вы должны ввести два символа «-».

  Как зашифровать и расшифровать файлы с помощью GPG в Linux

Если мы снова начнем с вершины, мы увидим изменение в поведении Аккермана.

top

топ работает в терминале

При значении nice, равном 15, Акерманн не потребляет много времени процессора. GNOME и Rhythmbox используют больше. Мы немного обуздали Аккермана.

Теперь давайте сделаем обратное и дадим Аккерману отрицательное значение nice. Обратите внимание на использование двух символов «-». Чтобы сделать приложение более эгоистичным и менее приятным, вы должны использовать sudo. Кто угодно может сделать свое приложение красивее, но только суперпользователи могут сделать еще одно более эгоистичным.

sudo nice --10 ./ackermann

Команда nice -10 в окне терминала

Давайте пробежимся по началу и посмотрим, какая разница.

top

топ работает в терминале

На этот раз у Аккермана хорошее значение -10. Он вернулся на верхнюю строчку и потребляет больше процессорного времени, чем раньше.

Команда renice

Команда renice позволяет нам настроить хорошее значение запущенного процесса. Нам не нужно останавливать его и перезапускать с помощью nice. Мы можем установить новое значение на лету.

  Как использовать команду тайм-аута в Linux

Команда renice принимает идентификатор процесса или PID процесса в качестве параметра командной строки. Мы можем либо извлечь идентификатор процесса из столбца «PID» вверху, либо мы можем использовать ps и grep, чтобы найти его для нас, как показано ниже. Очевидно, вы наберете имя своего пользователя вместо dave и имя процесса, который вас интересует, вместо ackermann.

ps -eu dave | grep ackermann

ps передается через grep в окне терминала

Теперь, когда у нас есть PID, мы можем использовать его с renice. Мы собираемся вернуть Акерманна к более приятному поведению с помощью значения nice, равного пяти. Чтобы изменить значение nice для запущенного процесса, вы должны использовать sudo. Обратите внимание, что в параметре 5 отсутствует «-». Вам не нужен один для положительных чисел, и вам нужен только один, а не два для отрицательных чисел.

sudo renice -n 5 2339

команда renice, запущенная в окне терминала

Мы получаем подтверждение, что Ренис изменила значение nice. Он показывает нам старое значение и новое значение.

Ядро обычно выполняет большую работу по обработке приоритетов и распределению времени процессора и системных ресурсов. Но если у вас есть долгая задача с интенсивным использованием ЦП, и вам все равно, когда она завершится, ваш компьютер будет работать немного плавнее, если вы установите более высокое значение nice для этой задачи. Так будет лучше для всех.