nice
Утилитаnice —компьютерная программа вUNIX-подобныхОС, предназначенная для запускапроцессов с изменённым приоритетом nice. Приоритет nice (целое число)процесса используетсяпланировщиком процессовядра ОС при распределениипроцессорного времени междупроцессами, может называться cpu_nice[1] для отличения от приоритета io_nice[2], используемогопланировщиком ввода-вывода и изменяемого утилитойionice[3]. Утилита nice появилась в 4‑й версииОСUNIX, разработанной фирмойAT&T[4]. Описана в стандарте IEEE Std 1003.1-2001 (POSIX.1)[4][5]. Одна из реализацийnice входит в пакетcoreutils.
Следует различать термины «утилита» и «команда».Утилита —компьютерная программа, исполняемая в отдельномпроцессе.Команда — встроенная командаинтерпретатора команд (shell), исполняемая внутрипроцессаshell.
Командаnice — встроенная командаинтерпретатора команд (shell), выполняющая такие же функции, как и утилитаnice, но работающая внутрипроцессаshell. Реализована, например,интерпретаторами командcsh иtcsh.
Приоритет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 включительно[6]. Приоритеты −20…+19 утилиты или командыnice соответствуют приоритетам 100…139планировщика процессов. Другие приоритетыпланировщика процессов можно установить командойchrt из пакетаutil-linux.
Планировщик процессовядраОСFreeBSD поддерживает приоритеты от −20 до +20.
ВОСLinux для получения текущего приоритета niceпроцесса используетсясистемный вызовgetpriority(), а для его изменения —setpriority()[7].
Планировщик процессов может работать в соответствии с выбранной пользователем политикой (англ. scheduling policy). Некоторые политики могут игнорировать приоритет nice.
ВОСLinux с помощьюсистемного вызоваsched_getscheduler() можно узнать применяемую для текущегопроцесса политикупланировщика процесса, а с помощьюsched_setscheduler() — изменить её[8].
Для изменения приоритета уже запущенных процессов используется утилитаrenice.
Синтаксис
[править |править код]nice[-nсмещение][--adjustment=смещение][команда[аргумент…]]
Параметры
[править |править код]- -n смещение
- --adjustment=смещение
- Установить приоритет nice, равный сумме текущего приоритета nice и указанного числа «смещение». Если этот аргумент не указан, будет использовано число 10.
Примечания
[править |править код]- ↑CPU —англ. central processing unit,центральный процессор.
- ↑IO —англ. input-output,ввод-вывод.
- ↑ionice — программа из пакетаutil-linux. См.
ionice(1)— страница справкиman по пользовательским командамGNU/Linux (англ.). - ↑12
nice(1)— страница справкиman по пользовательским командамFreeBSD (англ.). - ↑Утилитаnice . The Open Group. — The Open Group Base Specifications Issue 7. IEEE Std 1003.1, 2013 Edition. Дата обращения: 8 августа 2015. Архивировано 12 сентября 2015 года.
- ↑См.исходный кодядра Linux:
- kernel/sched/sched.hАрхивная копия от 24 сентября 2015 наWayback Machine;
- include/linux/sched/rt.h.
- ↑
getpriority(2)— страница справкиman по системным вызовамGNU/Linux (англ.) - ↑
sched_getscheduler(2)— страница справкиman по системным вызовамGNU/Linux (англ.)