table of contents
- bookworm-backports 1:4.24.0-2~bpo12+1
- testing 1:4.24.0-2
- unstable 1:4.24.0-2
getpriority(2) | System Calls Manual | getpriority(2) |
NAZWA¶
getpriority, setpriority - pobiera/ustawia priorytet programu podczas szeregowania zadań
BIBLIOTEKA¶
Standardowa biblioteka C (libc, -lc)
SKŁADNIA¶
#include <sys/resource.h>
int getpriority(int which, id_t who); int setpriority(int which, id_t who, int prio);
OPIS¶
Priorytet procesu, grupy procesów, lub użytkownika podczas szeregowania zadań, wskazywany przez which i who jest uzyskiwany za pomocą wywołania getpriority(), a ustawiany za pomocą wywołania setpriority. Atrybut procesu, na którym działają niniejsze wywołania systemu jest tym samym atrybutem (znanym również jako wartość „nice”), na którym działa nice(2).
Wartość which jest jedną z: PRIO_PROCESS, PRIO_PGRP lub PRIO_USER, a who jest interpretowane względem which (identyfikator procesu dla PRIO_PROCESS, identyfikator grupy procesów dla PRIO_PGRP i identyfikator użytkownika dla PRIO_USER). Zerowa wartość who określa (odpowiednio) proces wywołujący, grupę procesów procesu wywołującego lub rzeczywisty identyfikator użytkownika procesu wywołującego.
prio jest wartością z zakresu od -20 do 19 (lecz zob. UWAGI poniżej), gdzie -20 jest najwyższym priorytetem, a 19 jest najniższym priorytetem. Próby ustawienia priorytetu spoza tego przedziału, są po cichu ograniczane do obowiązującego przedziału. Domyślnym priorytetem jest 0; mniejsze wartości dają procesowy wyższy priorytet podczas szeregowania zadań.
Wywołanie getpriority() zwraca najwyższy priorytet (najniższą wartość numeryczną), spośród posiadanych przez którykolwiek z podanych procesów. Wywołanie setpriority() ustawia priorytety wszystkich podanych procesów na wskazaną wartość.
Tradycyjnie, jedynie proces uprzywilejowany mógł zmniejszyć wartość nice (tj. ustawić wyższy priorytet). Jednakże od Linuksa 2.6.12, proces nieuprzywilejowany może zmniejszyć wartość nice procesu docelowego, mającego odpowiedni miękki limit RLIMIT_NICE; więcej szczegółów w podręczniku getrlimit(2).
WARTOŚĆ ZWRACANA¶
Po pomyślnym zakończeniu getpriority() zwraca wartość nice wywołującego wątku, która może być liczbą ujemną. Po błędzie zwraca -1 i ustawia errno wskazując błąd.
Ze względu na fakt, że pomyślne wywołanie do getpriority() może zwrócić poprawną wartość -1, konieczne jest wyczyszczenie errno przed wywołaniem, a następnie sprawdzenie errno po nim, aby określić czy wartość -1 jest błędem, czy poprawną wartością nice.
setpriority() zwraca 0 po pomyślnym zakończeniu. W przypadku błędu zwraca -1 i ustawia errno wskazując jego rodzaj.
BŁĘDY¶
- EACCES
- Wywołujący próbował obniżyć wartość nice (tj. ustawić wyższy priorytet procesu), ale nie posiadał odpowiednich przywilejów (na Linuksie: nie posiadał przywileju (ang. capability) CAP_SYS_NICE).
- EINVAL
- which nie był jednym z PRIO_PROCESS, PRIO_PGRP lub PRIO_USER.
- EPERM
- Proces został zlokalizowany, ale jego efektywny identyfikator użytkownika nie pasował ani do efektywnego, ani do rzeczywistego identyfikatora użytkownika wywołującego i nie był on uprzywilejowany (na Linuksie: nie posiadał przywileju CAP_SYS_NICE). Zob. jednakże UWAGI poniżej.
- ESRCH
- Nie zlokalizowano żadnego procesu przy użyciu podanych wartości which i who.
STANDARDY¶
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (funkcje te pierwotnie pojawiły się w 4.2BSD).
UWAGI¶
Więcej informacji o wartości nice opisano w podręczniku sched(7).
Uwaga: w związku z dodaniem funkcjonalności „autogroup” w Linuksie 2.6.38, wartość nice w wielu przypadkach nie zachowuje się w swój tradycyjny sposób. Więcej informacji w podręczniku sched(7).
Proces potomny utworzony za pomocą fork(2) dziedziczy wartość nice swojego procesu macierzystego. Wartość nice jest zachowywana przez execve(2).
Szczegółowe warunki wystąpienia błędu EPERM zależą od systemu. Powyżej opisano co mówi na ten temat POSIX.1-2001, z którym wydają się być zgodne wszystkie systemy typu System V. Jądra Linux przed Linuksem 2.6.12 wymagały, aby rzeczywisty lub efektywny ID użytkownika wywołującego zgadzał się z rzeczywistym użytkownikiem procesu who (zamiast z jego efektywnym ID użytkownika). Linux 2.6.12 i późniejsze wymaga, aby efektywny identyfikator użytkownika wywołującego zgadzał się z rzeczywistym lub efektywnym ID użytkownika procesu who. Wszystkie systemy typu BSD (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, FreeBSD 4.3, OpenBSD-2.5, ...) zachowują się w ten sam sposób jak Linux 2.6.12 i późniejsze.
Różnice biblioteki C/jądra¶
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).
USTERKI¶
Zgodnie z POSIX, wartość nice jest ustawieniem przypisanym procesowi. Jednak w aktualnej implementacji Linuksa/NPTL wątków POSIX, wartość nice jest atrybutem przypisanym wątkowi: różne wątki tego samego procesu mogą mieć różne wartości nice. Przenośne aplikacje powinny unikać polegania na zachowaniu Linuksa, które może w przyszłości ulec zmianie na zgodne ze standardami.
ZOBACZ TAKŻE¶
nice(1), renice(1), fork(2), capabilities(7), sched(7)
Documentation/scheduler/sched-nice-design.txt w drzewie źródeł jądra Linux (od Linuksa 2.6.23)
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
4 grudnia 2022 r. | Linux man-pages 6.03 |