Команды nice и renice позволяют точно настроить то, как ядро обрабатывает ваши процессы, регулируя их приоритеты. Прочтите это руководство, чтобы узнать, как использовать их в Linux и Unix-подобных операционных системах, таких как macOS.
Оглавление
Все дело в процессе
Внутри вашего Linux или Unix-подобного компьютера будет выполняться множество процессов еще до того, как вы запустите приложение, которое хотите использовать. Большинство этих процессов являются жизненно важными элементами самого Linux или вспомогательными процессами для графической среды рабочего стола. За кулисами происходит много всего. Конечно, есть ограниченное количество системных ресурсов и процессорного времени. Ядро Linux является контроллером всех этих процессов.
Именно ядро должно решить, какие процессы привлекают внимание и ресурсы прямо сейчас, а какие должны ждать. Ядро постоянно манипулирует процессами и приоритетами, чтобы гарантировать, что компьютер работает как можно более плавно и что все процессы получают свою соответствующую долю. Некоторые процессы получают льготы. Они настолько важны для общей работы компьютера, что их потребности должны быть важнее, например, вашего браузера.
Хорошая ценность
Одним из критериев, используемых для определения того, как ядро обрабатывает процесс, является значение nice. Каждый процесс имеет свою ценность. Значение nice представляет собой целое число в диапазоне от -19 до 20. Все стандартные процессы запускаются с нулевым значением nice.
Уловка здесь в том, что чем выше значение nice, тем лучше ваш процесс для других процессов. Другими словами, высокое значение nice сообщает ядру, что этот процесс готов ждать. Отрицательное число противоположно хорошему. Чем больше отрицательное значение nice, тем более эгоистичным является процесс. Он пытается получить как можно больше процессорного времени, не обращая внимания на другие процессы.
Мы можем использовать команду nice, чтобы установить значение nice, когда процесс запущен и мы можем использовать renice для настройки значения nice текущего процесса.
Хорошая команда
Мы можем использовать команду nice, чтобы настроить значение nice для программы при ее запуске. Это позволяет нам увеличивать или уменьшать приоритет, присвоенный процессу ядром по сравнению с другими процессами.
Предположим, программист написал программу под названием Акерманн. Это вычисляет Функции Акермана. Это интенсивно использует процессор и память. Программист может запустить программу с помощью следующей команды:
./ackermann
Мы можем использовать команду top для просмотра запущенной программы.
top
Мы можем увидеть детали программы Аккермана вверху. Хорошее значение — это цифра в столбце «NI». Как и следовало ожидать, он установлен на ноль.
Давайте перезапустим его и на этот раз сделаем менее требовательным. Мы установим для программы Аккермана хорошее значение 15 следующим образом. Введите nice, пробел, -15, еще один пробел, а затем название программы, которую вы хотите запустить. В нашем примере наш вымышленный программист использует ./ackermann.
nice -15 ./ackermann
Обратите внимание, «-15» не отрицательные пятнадцать. Положительно пятнадцать. Знак «-» необходим для того, чтобы приятно сообщить, что мы передаем параметр. Чтобы указать отрицательное число, вы должны ввести два символа «-».
Если мы снова начнем с вершины, мы увидим изменение в поведении Аккермана.
top
При значении nice, равном 15, Акерманн не потребляет много времени процессора. GNOME и Rhythmbox используют больше. Мы немного обуздали Аккермана.
Теперь давайте сделаем обратное и дадим Аккерману отрицательное значение nice. Обратите внимание на использование двух символов «-». Чтобы сделать приложение более эгоистичным и менее приятным, вы должны использовать sudo. Кто угодно может сделать свое приложение красивее, но только суперпользователи могут сделать еще одно более эгоистичным.
sudo nice --10 ./ackermann
Давайте пробежимся по началу и посмотрим, какая разница.
top
На этот раз у Аккермана хорошее значение -10. Он вернулся на верхнюю строчку и потребляет больше процессорного времени, чем раньше.
Команда renice
Команда renice позволяет нам настроить хорошее значение запущенного процесса. Нам не нужно останавливать его и перезапускать с помощью nice. Мы можем установить новое значение на лету.
Команда renice принимает идентификатор процесса или PID процесса в качестве параметра командной строки. Мы можем либо извлечь идентификатор процесса из столбца «PID» вверху, либо мы можем использовать ps и grep, чтобы найти его для нас, как показано ниже. Очевидно, вы наберете имя своего пользователя вместо dave и имя процесса, который вас интересует, вместо ackermann.
ps -eu dave | grep ackermann
Теперь, когда у нас есть PID, мы можем использовать его с renice. Мы собираемся вернуть Акерманна к более приятному поведению с помощью значения nice, равного пяти. Чтобы изменить значение nice для запущенного процесса, вы должны использовать sudo. Обратите внимание, что в параметре 5 отсутствует «-». Вам не нужен один для положительных чисел, и вам нужен только один, а не два для отрицательных чисел.
sudo renice -n 5 2339
Мы получаем подтверждение, что Ренис изменила значение nice. Он показывает нам старое значение и новое значение.
Ядро обычно выполняет большую работу по обработке приоритетов и распределению времени процессора и системных ресурсов. Но если у вас есть долгая задача с интенсивным использованием ЦП, и вам все равно, когда она завершится, ваш компьютер будет работать немного плавнее, если вы установите более высокое значение nice для этой задачи. Так будет лучше для всех.