ИМЯ¶
getpriority, setpriority -
получить/установить
приоритет
программы
ОБЗОР¶
#include <sys/time.h>
#include <sys/resource.h>
int getpriority(int which, int who);
int setpriority(int which, int who, int
prio);
ОПИСАНИЕ¶
Вызовом
getpriority
можно
получить и
вызовом
setpriority
можно
установить
приоритет
планировщика
для
процесса,
группы
процесса или
пользователя
в
зависимости
от заданных
значений
which и
who.
Which может
принимать
одно из
значений
PRIO_PROCESS,
PRIO_PGRP, или
PRIO_USER, а
who
интерпретируется
в
зависимости
от
which
(идентификатор
процесса для
PRIO_PROCESS, группы
процесса для
PRIO_PGRP, и
идентификатор
пользователя
для
PRIO_USER).
Нулевое
значение для
who означает
(соответственно)
вызывающий
процесс,
группу
вызывающего
процесса или
реальный
идентификатор
пользователя
вызывающего
процесса.
Prio -
это значение
в диапазоне
от -20 до 20 (см.
замечания
ниже). По
умолчанию
приоритет
равен 0; более
низкие
значения
соответствуют
большему
приоритету,
который
уделяет
задаче
планировщик.
Вызов
getpriority
возвращает
наивысший
приоритет
(наименьшее
числовое
значение), из
приоритетов
всех
указанных
процессов.
Вызов
setpriority
устанавливает
приоритеты
всех
указанных
процессов в
заданное
значение.
Только
суперпользователь
может
устанавливать
приоритет
ниже нуля.
ВОЗВРАЩАЕМОЕ
ЗНАЧЕНИЕ¶
Поскольку
getpriority может
возвращать
значение -1
как один из
правильных
результатов,
необходимо
очищать
значение
переменной
errno перед этим
вызовом и
затем
проверять
его снова
после
вызова,
чтобы
определить,
является ли -1
ошибкой или
результатом
вызова.
Вызов
setpriority
возвращает 0,
если прошёл
успешно или -1,
если
завершился с
ошибкой.
ОШИБКИ¶
- ESRCH
- Не
найдено
процессов,
которые
заданы
значениями
which и who.
- EINVAL
- Which не
является
одним из
значений
PRIO_PROCESS, PRIO_PGRP, или
PRIO_USER.
В дополнение
к
вышеуказанным
ошибкам,
setpriority
может
завершиться
неудачно,
если:
- EPERM
- Процесс
был найден,
но
эффективному
идентификатору
пользователя
этого
процесса не
соответствует
заданный в
вызове
эффективный
(или
реальный)
идентификатор
пользователя.
- EACCES
- Не-суперпользователь
пытается
назначить
приоритет
ниже нуля.
ЗАМЕЧАНИЯ¶
Детали
условия
возникновения
ошибки EPERM
зависят от
системы.
Ниже дано
описание,
что по этому
поводу
говорит
стандарт SUSv3 и
далее что
происходит
на системах
стандрта SYSV. Linux
требует,
чтобы
реальный или
эффективный
идентификатор
пользователя,
производящего
вызов
совпадали с
реальным
идентификатором
пользователя
для
процесса,
указанного в
who (вместо
эффективного
идентификатора
пользователя).
Все BSD системы
(SunOS 4.1.3, Ultrix 4.2, BSD 4.3, FreeBSD 4.3, OpenBSD-2.5, ...)
требуют
чтобы
эффективный
идентификатор
пользователя,
производящего
вызов
совпадал с
реальным или
эффективным
идентифкатором
пользователя
для
процесса,
указанного в
who.
Фактический
диапазон
значений
приоритета
варьируется
в
зависимости
от версий
ядра. Linux до 1.3.36
имел
диапазон
значений -infinity..15. Linux
начиная с 1.3.43
имеет
диапазон
значений -20..19 и
системный
вызов getpriority
возвращает
для этих
значений
величины 40..1
(отрицательные
числа
показывают
код ошибки).
Библиотечный
вызов
преобразует
возвращаемое
значение N в
значение 20-N.
Включение
заголовочного
файла
<sys/time.h> в
настоящее
время не
требуется,
но
увеличивает
переносимость,
написанной
программы. (В
реальности,
<sys/resource.h>
определяет
структуру
rusage
с полями
типа
structtimeval
,
которая
определяется
в
<sys/time.h>.)
СООТВЕТСТВИЕ
СТАНДАРТАМ¶
SVr4, 4.4BSD (эти вызовы
впервые
появились в
4.2BSD).
СМОТРИ
ТАКЖЕ¶
nice(1),
fork(2),
renice(8)
ПЕРЕВОД¶
Перевёл с
английского
Виктор
Вислобоков
<corochoone@perm.ru> 2005