getpriority(2) System Calls Manual getpriority(2) NAZWA getpriority, setpriority - pobiera/ustawia priorytet programu podczas szeregowania zadan BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int getpriority(int which, id_t who); int setpriority(int which, id_t who, int prio); OPIS Priorytet procesu, grupy procesow, lub uzytkownika podczas szeregowania zadan, wskazywany przez which i who jest uzyskiwany za pomoca wywolania getpriority(), a ustawiany za pomoca wywolania setpriority. Atrybut procesu, na ktorym dzialaja niniejsze wywolania systemu jest tym samym atrybutem (znanym rowniez jako wartosc ,,nice"), na ktorym dziala nice(2). Wartosc which jest jedna z: PRIO_PROCESS, PRIO_PGRP lub PRIO_USER, a who jest interpretowane wzgledem which (identyfikator procesu dla PRIO_PROCESS, identyfikator grupy procesow dla PRIO_PGRP i identyfikator uzytkownika dla PRIO_USER). Zerowa wartosc who okresla (odpowiednio) proces wywolujacy, grupe procesow procesu wywolujacego lub rzeczywisty identyfikator uzytkownika procesu wywolujacego. prio jest wartoscia z zakresu od -20 do 19 (lecz zob. UWAGI ponizej), gdzie -20 jest najwyzszym priorytetem, a 19 jest najnizszym priorytetem. Proby ustawienia priorytetu spoza tego przedzialu, sa po cichu ograniczane do obowiazujacego przedzialu. Domyslnym priorytetem jest 0; mniejsze wartosci daja procesowy wyzszy priorytet podczas szeregowania zadan. Wywolanie getpriority() zwraca najwyzszy priorytet (najnizsza wartosc numeryczna), sposrod posiadanych przez ktorykolwiek z podanych procesow. Wywolanie setpriority() ustawia priorytety wszystkich podanych procesow na wskazana wartosc. Tradycyjnie, jedynie proces uprzywilejowany mogl zmniejszyc wartosc nice (tj. ustawic wyzszy priorytet). Jednakze od Linuksa 2.6.12, proces nieuprzywilejowany moze zmniejszyc wartosc nice procesu docelowego, majacego odpowiedni miekki limit RLIMIT_NICE; wiecej szczegolow w podreczniku getrlimit(2). WARTOSC ZWRACANA Po pomyslnym zakonczeniu getpriority() zwraca wartosc nice wywolujacego watku, ktora moze byc liczba ujemna. Po bledzie zwraca -1 i ustawia errno wskazujac blad. Ze wzgledu na fakt, ze pomyslne wywolanie do getpriority() moze zwrocic poprawna wartosc -1, konieczne jest wyczyszczenie errno przed wywolaniem, a nastepnie sprawdzenie errno po nim, aby okreslic czy wartosc -1 jest bledem, czy poprawna wartoscia nice. setpriority() zwraca 0 po pomyslnym zakonczeniu. W przypadku bledu zwraca -1 i ustawia errno wskazujac jego rodzaj. BLEDY EACCES Wywolujacy probowal obnizyc wartosc nice (tj. ustawic wyzszy priorytet procesu), ale nie posiadal odpowiednich przywilejow (na Linuksie: nie posiadal przywileju (ang. capability) CAP_SYS_NICE). EINVAL which nie byl jednym z PRIO_PROCESS, PRIO_PGRP lub PRIO_USER. EPERM Proces zostal zlokalizowany, ale jego efektywny identyfikator uzytkownika nie pasowal ani do efektywnego, ani do rzeczywistego identyfikatora uzytkownika wywolujacego i nie byl on uprzywilejowany (na Linuksie: nie posiadal przywileju CAP_SYS_NICE). Zob. jednakze UWAGI ponizej. ESRCH Nie zlokalizowano zadnego procesu przy uzyciu podanych wartosci which i who. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, SVr4, 4.4BSD (interfejsy te pierwotnie pojawily sie w 4.2BSD). UWAGI Wiecej informacji o wartosci nice opisano w podreczniku sched(7). Uwaga: w zwiazku z dodaniem funkcjonalnosci ,,autogroup" w Linuksie 2.6.38, wartosc nice w wielu przypadkach nie zachowuje sie w swoj tradycyjny sposob. Wiecej informacji w podreczniku sched(7). Proces potomny utworzony za pomoca fork(2) dziedziczy wartosc nice swojego procesu macierzystego. Wartosc nice jest zachowywana przez execve(2). Szczegolowe warunki wystapienia bledu EPERM zaleza od systemu. Powyzej opisano co mowi na ten temat POSIX.1-2001, z ktorym wydaja sie byc zgodne wszystkie systemy typu System V. Jadra Linux przed Linuksem 2.6.12 wymagaly, aby rzeczywisty lub efektywny ID uzytkownika wywolujacego zgadzal sie z rzeczywistym uzytkownikiem procesu who (zamiast z jego efektywnym ID uzytkownika). Linux 2.6.12 i pozniejsze wymaga, aby efektywny identyfikator uzytkownika wywolujacego zgadzal sie z rzeczywistym lub efektywnym ID uzytkownika procesu who. Wszystkie systemy typu BSD (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, FreeBSD 4.3, OpenBSD-2.5, ...) zachowuja sie w ten sam sposob jak Linux 2.6.12 i pozniejsze. Roznice biblioteki C/jadra Wywolanie systemowe getpriority zwraca wartosci nice przetlumaczone na zakres 40..1, poniewaz wartosc negatywna zostalaby zinterpretowana jako blad. Funkcja opakowujaca glibc dla getpriority() tlumaczy ta wartosc z powrotem, zgodnie z wzorem unice = 20 - knice (zatem zakres 40..1 zwracany przez jadro powraca do zakresu -20..19 widzianego przez przestrzen uzytkownika). USTERKI Zgodnie z POSIX, wartosc nice jest ustawieniem przypisanym procesowi. Jednak w aktualnej implementacji Linuksa/NPTL watkow POSIX, wartosc nice jest atrybutem przypisanym watkowi: rozne watki tego samego procesu moga miec rozne wartosci nice. Przenosne aplikacje powinny unikac polegania na zachowaniu Linuksa, ktore moze w przyszlosci ulec zmianie na zgodne ze standardami. ZOBACZ TAKZE nice(1), renice(1), fork(2), capabilities(7), sched(7) Documentation/scheduler/sched-nice-design.txt w drzewie zrodel jadra Linux (od Linuksa 2.6.23) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. getpriority(2)