4.19 Изменение приоритета процесса

Утилита nice — программа, предназначенная для запуска процессов с изменённым приоритетом nice. Приоритет nice (целое число) процесса используется планировщиком процессов ядра ОС при распределении процессорного времени между процессами

Приоритет nice — число, указывающее планировщику процессов ядра ОС приоритет, который пользователь хотел бы назначить процессу.

Утилита nice, запущенная без аргументов, выводит приоритет nice, унаследованный от родительского процесса. nice принимает аргумент «смещение» в диапазоне от -20 (наивысший приоритет) до +19 (низший приоритет). Если указать смещение и путь к исполняемому файлу, утилита nice получит приоритет своего процесса, изменит его на указанное смещение и использует системный вызов семейства exec() для замещения кода своего процесса кодом из указанного исполняемого файла. Команда nice сделает то же, но сначала выполнит системный вызов семейства fork() для запуска дочернего процесса (англ. sub-shell). Если смещение не указано, будет использовано смещение +10. Привилегированный пользователь (root) может указать отрицательное смещение.

Приоритет nice и приоритет планировщика процессов ядра ОС — разные числа. Число nice — приоритет, который пользователь хотел бы назначить процессу. Приоритет планировщика — действительный приоритет, назначенный процессу планировщиком. Планировщик может стремиться назначить процессу приоритет, близкий к nice, но это не всегда возможно, так как в системе может выполняться множество процессов с разными приоритетами. Приоритет nice является атрибутом процесса и, как и другие атрибуты, наследуется дочерними процессами. В выводе утилит top, ps, htop и др. приоритет nice называется «NI» — сокращение от «nice», а приоритет планировщика — «PRI» — сокращение от «priority». Обычно, NI = PRI — 20, но это верно не всегда. По умолчанию NI=0, соответственно PRI=20.

Планировщик процессов ядра ОС Linux поддерживает приоритеты от 0 (реальное время) до 139 включительно. Приоритеты -20…+19 утилиты или команды nice соответствуют приоритетам 100…139 планировщика процессов. Другие приоритеты планировщика процессов можно установить командой chrt из пакета util-linux.

Для изменения приоритета уже запущенных процессов используется утилита renice.

Синтаксис:

nice [-n смещение] [--adjustment=смещение] [команда [аргумент…]]

Параметры:

-n смещение
--adjustment=смещение

Установить приоритет nice, равный сумме текущего приоритета nice и указанного числа «смещение». Если этот аргумент не указан, будет использовано число 10.

Чтобы запустить процесс со значением nice, отличным от 10, можно использовать ключ -n.

nice -n 15 yes > /dev/null &

или

nice -15 yes > /dev/null &

Чтобы установить значение nice ниже нуля, требуются права суперпользователя. В противном случае будет установлено значение 0. Попробуем задать значение nice -1 без прав root:

nice -n -1 yes > /dev/null &
nice: cannot set niceness: Permission denied

Поэтому, чтобы задать значение nice меньше 0, необходимо запускать программу как root, или использовать sudo.

# nice -n -1 yes > /dev/null &

У запущенной программы с помощью команды renice можно изменить назначенный приоритет. Предположим, что есть работающая программа yes со значением nice 10. Чтобы изменить его значение, можно использовать команду renice со значением nice и PID процесса. Изменим значение nice на 15:

renice -n 15 -p 5645

Согласно правилам, обычный пользователь может только увеличивать значение nice (уменьшать приоритет) любого процесса. Если попробовать изменить значение nice с 15 до 10, мы получим следующее сообщение об ошибке:

renice -n 10 -p 5645
renice: failed to set priority for 5645 (process ID): Permission denied

Также, команда renice позволяет суперпользователю изменять значение nice процессов любого пользователя. Это делается с помощью ключа -u. Следующая команда изменяет значение приоритета всех процессов пользователя на -19:

# renice -n -19 -u lubos
1000 (user ID) old priority 0, new priority -19

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.

Print Friendly, PDF & Email