Главная » 2017 » Ноябрь » 19 » man 2 getpriority
22:25
man 2 getpriority

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


getpriority, setpriority - получить/установить приоритет планирования программы



ОБЗОР


#include <sys/time.h>
#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).



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении getpriority() возвращает значение уступчивости вызывающей
нити, которое может быть отрицательным. При ошибке возвращается -1 и изменяется
значение errno, указывающее код ошибки. Так как getpriority() в качестве
результата может вернуть -1, то перед вызовом необходимо очищать значение внешней
переменной errno, а затем проверять его после вызова, чтобы определить, является
ли -1 ошибкой или результатом вызова.

При нормальном завершении работы setpriority() возвращает 0. В случае ошибки
возвращается -1, а errno устанавливается в соответствующее значение.



ОШИБКИ


EINVAL Значение which не равно PRIO_PROCESS, PRIO_PGRP или PRIO_USER.

ESRCH Не найдено процессов, которые заданы значениями which и who.

В дополнение к вышеуказанным ошибкам, setpriority() может завершиться неудачно:

EACCES Вызывающий пытается понизить значение уступчивости (то есть повысить
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 сохраняется.

Детали условия возникновения ошибки EPERM зависят от системы. Описание,
приведённое выше, соответствует POSIX.1-2001, и, кажется, ему удовлетворяют все
System V-подобные системы. Ядра Linux до версии 2.6.12 требуют, чтобы эффективный
идентификатор пользователя вызывающего совпадал с реальным идентификатором
пользователя процесса who (вместо его эффективного идентификатора пользователя). В
Linux 2.6.12 и новее требуется, чтобы эффективный идентификатор пользователя
вызывающего совпадал с реальным или эффективным идентификатором пользователя
процесса who. Все системы BSD (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, FreeBSD 4.3,
OpenBSD-2.5, …) действуют также как Linux 2.6.12 и новее.

Включать <sys/time.h> в настоящее время не требуется, но это увеличивает
переносимость (безусловно, в <sys/resource.h> определена структура rusage с полями
типа struct timeval, которая определена в <sys/time.h>).

Отличия между библиотекой C и ядром
Внутри ядра значения nice на самом деле представлены как диапазон (так как
отрицательными числами задаются коды ошибок) и эти значения возвращаются
системными вызовами setpriority() и getpriority(). Обёрточные функции glibc для
этих системных вызовов преобразуют значение между пользовательским и ядерным
диапазонами по формуле unice = 20 - knice (таким образом, ядерный диапазон 40..1
соответствует диапазону -20..19, видимый в пользовательском пространстве).



ДЕФЕКТЫ


Согласно 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)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 451 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar