nice

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Утилита nice — компьютерная программа в UNIX-подобных ОС, предназначенная для запуска процессов с изменённым приоритетом nice для планировщика процессов. Появилась в 4‑й версии ОС UNIX от фирмы AT&T[1]. Описана в стандарте IEEE Std 1003.1-2001 (POSIX.1)[1][2]. Одна из реализаций nice входит в пакет coreutils.

Команда nice — встроенная команда интерпретатора команд (shell), выполняющая такие же функции, как и утилита nice, но работающая внутри процесса shell. Реализована, например, интерпретаторами команд csh и tcsh.

Следует различать термины «утилита» и «команда». Утилита — компьютерная программа, исполняемая в отдельном процессе. Команда — встроенная команда shell, исполняемая внутри процесса shell.

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

Описание[править | править вики-текст]

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

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

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

Планировщик процессов ядра ОС FreeBSD поддерживает приоритеты от -20 до 20.

В ОС Linux для получения текущего приоритета nice процесса используется системный вызов getpriority(), а для его изменения — setpriority()[4].

Планировщик процессов может работать в соответствии с выбранной пользователем политикой (англ. scheduling policy). Некоторые политики могут игнорировать приоритет nice.

В ОС Linux с помощью системного вызова sched_getscheduler() можно узнать применяемую для текущего процесса политику планировщика процесса, а с помощью sched_setscheduler() — изменить её[5].

Синтаксис[править | править вики-текст]

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

Параметры[править | править вики-текст]

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

Примечания[править | править вики-текст]

  1. 1 2 nice(1) — страница справки man по пользовательским командам FreeBSD  (англ.).
  2. Утилита nice. The Open Group. — The Open Group Base Specifications Issue 7. IEEE Std 1003.1, 2013 Edition. Проверено 8 августа 2015.
  3. См. исходный код ядра Linux:
  4. getpriority(2) — страница справки man по системным вызовам GNU/Linux  (англ.)
  5. sched_getscheduler(2) — страница справки man по системным вызовам GNU/Linux  (англ.)

Ссылки[править | править вики-текст]

  • nice(1) — страница справки man по пользовательским командам GNU/Linux  (англ.) (см.: GNU Coreutils).
  • nice(1) — страница справки man по пользовательским командам OpenBSD  (англ.).
  • nice(1) — страница справки man по пользовательским командам FreeBSD  (англ.).
  • Утилита renice.