
Синопсис
# include < unistd.h >
int nice ( int incr );
Чим нижче фактор поступливості, тим вище рівень пріоритету процесу. Параметр incr містить значення, яке добавляється до біжучого фактору поступливості процесу, який викликає. Значення параметру incr може бути від’ємним і додатнім, а фактор поступливості є невід’ємним числом. Додатне значення incr збільшує фактор поступливості, а отже, зменшує рівень пріоритету. Від’ємне значення incr зменшує фактор поступливості, тим самим підвищує рівень пріоритету. Якщо значення incr змінює фактор поступливості вище або нижче відповідних граничних величин, він встановлюється рівним самій високій або самій низькій межам відповідно. При успішному виконанні функція nice () повертає новий фактор поступливості процесу, в іншому випадку – число -1, а попереднє значення фактору поступливості при цьому не змінюється.
Синопсис
# include < sys/resource.h >
int getpriority ( int which, id_t who);
int setpriority ( int which, id_t who, int value);
Функція setpriority () встановлює фактор поступливості для заданого процесу, групи процесів або користувача. Функція getpriority () повертає пріоритет заданого процесу, групи процесів або користувача. Синтаксис використання функцій setpriority () і getpriority () для встановлення і зчитування фактора поступливості біжучого процесу подано в лістінгу 1.
Лістінг 1. Використання функцій setpriority () і getpriority ()
# include < sys/resource.h >
. . .
id_t pid = 0;
int which = PRIO_PROCESS;
int value = 10;
int nice_value;
int ret;
nice_value = getpriority (which, pid);
if (nice_value < value) {
ret = setpriority (which, pid, value);
}
// . . .
В лістінгу 1 повертається та встановлюється пріоритет процесу який викликає. Якщо фактор поступливості процесу, який викликає, стає менше 10, він встановлюється рівним 10. Процес задається значенням, що зберігається в параметрах which і who (синопсис вище). Параметр which може визначати процес, групу процесів або користувача і має наступні значення.
PRIO_PROCESS Означає процес
PRIO_PGRP Означає групу процесів
PRIO_USER Означає користувача
В залежності від значення параметру which параметр who містить ідентифікаційний номер (id) процесу або ефективного користувача. В лістінгу 1 параметру which присвоюється значення PRIO_PROCESS. В лістінгу 1 параметр who встановлюється рівним 0, означаючи тим самим біжучий процес. Параметр value для функції setpriority () визначає нове значення фактора поступливості для заданого процесу, групи процесів або користувача. Фактори поступливості в середовищі Linux повинні знаходитися в межах від -20 до 19. В лістінгу 1 фактор поступливості встановлюється рівним 10, якщо біжуче його значення виявиться менше 10. На відміну від функції nice (), значення, яке передається функції setpriority (), є фактичним значенням фактору поступливості, а не зміщенням, яке додається до біжучого фактору поступливості.
Якщо процес має декілька потоків, модифікація пріоритету вплине на пріоритет всіх його потоків. При успішному виконанні функції getpriority () повертає фактор поступливості заданого процесу, а при успішному виконанні функції setpriority () – значення 0. У випадку невдачі обидві функції повертають число -1. Однак число -1 є допустимим значенням фактора поступливості для довільного процесу. Щоб перевірити, чи не було помилок при виконанні функції getpriority (), є доцільним протестувати зовнішню змінну errno.