getpriority, setpriority -
получить/установить
приоритет
планирования
программы
Standard C library (
libc,
-lc)
#include <sys/resource.h>
int getpriority(int which, id_t who);
int setpriority(int which, id_t who, int prio);
С помощью
вызова
getpriority()
можно
получить
приоритет
планирования
(scheduling priority)
процесса,
группы
процессов
или
пользователя,
которые
заданы в
аргументах
which и
who, а с
помощью
вызова
setpriority()
назначить
его.
Атрибут
процесса
этих
системных
вызовов
тот же
самый что
атрибут
(так
называемое
значение
уступчивости
«nice»), с
которым
работает
вызов
nice(2).
Значением
which может
быть одно
из:
PRIO_PROCESS,
PRIO_PGRP
или
PRIO_USER, а
значение
who
рассматривается
относительно
which
(идентификатор
процесса,
если
PRIO_PROCESS;
группы
процесса,
если
PRIO_PGRP;
идентификатор
пользователя,
если
PRIO_USER).
Нулевое
значение
who
означает
(соответственно)
вызывающий
процесс,
группу
вызывающего
процесса
или
реальный
идентификатор
пользователя
вызывающего
процесса.
Аргумент
prio
— это
значение в
диапазоне
от -20 до 19
(смотрите
ЗАМЕЧАНИЯ
ниже), где -20
это
наивысший
приоритет,
а 19 —
наинизший.
Попытка
задать
приоритет
вне этого
диапазона
просто
подгоняется
под
диапазон.
По
умолчанию
приоритет
равен 0;
низкие
значения
дают
процессу
больший
приоритет
при
планировании.
Вызов
getpriority()
возвращает
наивысший
приоритет
(наименьшее
числовое
значение)
из
приоритетов
всех
указанных
процессов.
Вызов
setpriority()
устанавливает
приоритеты
всех
указанных
процессов
в заданное
значение.
Обычно,
только
привилегированный
процесс
может
понижать
значение
уступчивости
(т. е.,
повышать
приоритет).
Однако
начиная с Linux 2.6.12
непривилегированный
процесс
может
понизить
значение
уступчивости
процесса
назначения,
у которого
установлено
подходящее
мягкое
ограничение
RLIMIT_NICE;
подробности
смотрите в
getrlimit(2).
On success,
getpriority() returns the calling thread's nice value, which
may be a negative number. On error, it returns -1 and sets
errno to
indicate the error.
Since a successful call to
getpriority() can legitimately return the
value -1, it is necessary to clear
errno prior to the call, then check
errno afterward to determine if -1 is an error or a legitimate value.
setpriority() returns 0 on success. On failure, it returns -1 and sets
errno to indicate the error.
- EACCES
- Вызывающий
пытается
понизить
значение
уступчивости
(то есть
повысить
приоритет
процесса),
но он не
имеет на
это прав (в Linux:
не имеет
мандата
CAP_SYS_NICE).
- EINVAL
- Значение
which не равно
PRIO_PROCESS, PRIO_PGRP или
PRIO_USER.
- EPERM
- Процесс
был найден,
но
эффективному
идентификатору
пользователя
этого
процесса
не
соответствует
заданный в
вызове
эффективный
(или
реальный)
идентификатор
вызывающего
и у
вызывающего
нет прав (в Linux:
не имеет
мандата
CAP_SYS_NICE).
Смотрите
ЗАМЕЧАНИЯ
далее.
- ESRCH
- Не
найдено
процессов,
которые
заданы
значениями
which и who.
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (эти
интерфейсы
впервые
появились
в 4.2BSD).
Дополнительную
информацию
о значении
уступчивости
смотрите в
sched(7).
Замечание:
дополнительное
свойство
«autogroup» из Linux 2.6.38
означает,
что
значение
уступчивости
во многих
случаях
больше не
работает
как обычно.
Подробней
смотрите в
sched(7).
Потомок,
созданный
с помощью
fork(2),
наследует
значение nice
родителя.
При вызове
execve(2)
значение nice
сохраняется.
The details on the condition for
EPERM depend on the system. The above
description is what POSIX.1-2001 says, and seems to be followed on all
System V-like systems. Linux kernels before Linux 2.6.12 required the
real or effective user ID of the caller to match the real user of the process
who (instead of its effective user ID). Linux 2.6.12 and later require
the effective user ID of the caller to match the real or effective user ID of
the process
who. All BSD-like systems (SunOS 4.1.3, Ultrix 4.2, 4.3BSD,
FreeBSD 4.3, OpenBSD-2.5, ...) behave in the same manner as Linux 2.6.12 and
later.
The getpriority system call returns nice values translated to the range 40..1,
since a negative return value would be interpreted as an error. The glibc
wrapper function for
getpriority() translates the value back according
to the formula
unice = 20 - knice (thus,
the 40..1 range returned by the kernel corresponds to the range -20..19 as
seen by user space).
Согласно POSIX,
значение nice —
свойство
процесса.
Однако в
текущей
реализации
Linux/NPTL нитей POSIX
значение nice —
атрибут
нити:
различные
нити в
одном
процессе
могут
иметь
разные
значения nice.
Переносимые
приложения
не должны
полагаться
на
поведение
Linux, которое
может
стать
стандартом
в будущем.
nice(1),
renice(1),
fork(2),
capabilities(7),
sched(7)
Файл
Documentation/scheduler/sched-nice-design.txt из
дерева
исходного
кода ядра Linux
(начиная с Linux
2.6.23)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Vladislav <
[email protected]>,
Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]