NAZWA
getpriority, setpriority - pobranie/ustawienie priorytetu programu podczas szeregowania zadań
SKŁADNIA
#include
<sys/time.h>
#include <sys/resource.h>
int
getpriority(int which, int who);
int setpriority(int which, int
who, int prio);
OPIS
Uwaga! To tłumaczenie może być nieaktualne!
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. which jest jednym 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 funkcję, jego grupę procesów lub rzeczywisty identyfikator użytkownika procesu wywołującego funksję. prio jest wartością z zakresu od -20 do 20 (lecz zobacz UWAGI poniżej). Domyślnym priorytetem jest 0; mniejsze priorytety powodują korzystniejsze traktowanie podczas szeregowania zadań.
Funkcja getpriority zwraca najwyższą wartość (najniższą wartość numeryczną), spośród posiadanych przez którykolwiek z podanych procesów. Funkcja setpriority ustawia priorytety wszystkich podanych procesów na wskazaną wartość. Jedynie superużytkownik może zmniejszać priorytety.
WARTOŚĆ ZWRACANA
Ponieważ -1 jest legalną wartością spośród normalnie zwracanych przez getpriority, niezbędnym jest wyzerowanie zmiennej zewnętrznej errno przed wywołaniem tej funkcji i późniejsze sprawdzenie czy -1 oznaczało błąd, czy normalną wartość. Funkcja setpriority zwraca 0 jeśli nie było błędów lub -1 jeśli jakiś wystąpił.
BŁĘDY
ESRCH |
Nie zlokalizowano żadnego procesu przy użyciu podanych wartości which i who. | ||
EINVAL |
which nie był jednym z PRIO_PROCESS, PRIO_PGRP lub PRIO_USER. |
Oprócz powyższych błędów, dla setpriority mogą wystąpić:
EPERM |
Proces został zlokalizowany, lecz ani jego efektywny, ani rzeczywisty ID użytkownika nie odpowiadał efektywnemu ID użytkownika wywołującego. | ||
EACCES |
Użytkownik nie będący superużytkownikiem próbował obniżyć priorytet procesu. |
UWAGI
Szczegółowe warunki wystąpienia błędu EPERM zależą od systemu. Powyżej opisano co mówi na ten temat SUSv3, z którym wydają sie być zgodne wszystkie systemy typu SYSV. Linux wymaga, 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). Wszystkie systemy typu BSD (SunOS 4.1.3, Ultrix 4.2, BSD 4.3, FreeBSD 4.3, OpenBSD-2.5, ...) wymagają, aby efektywny ID użytkownika wywołującego zgadzał się z efektywnym ID użytkownika procesu who.
Rezczywisty zakres priorytetów jest różny dla różnych wersji jądra. Linux wcześniejszy niż 1.3.36 miał -nieskończoność..15. Linux od 1.3.43 ma -20..19, a funkcja systemowa getpriority zwraca 40..1 dla tych wartości (gdyż liczby ujemne są kodami błędów). Funkcja biblioteczna przekształca N na 20-N.
Włączanie <sys/time.h> nie jest obecnie wymagane, ale zwiększa przenośność. (Rzeczywiście, <sys/resource.h> definiuje strukturę rusage zawierającą pola typu struct timeval zdefiniowanego w <sys/time.h>.)
ZGODNE Z
SVr4, 4.4BSD (funkcje te pierwotnie pojawiły się w 4.2BSD).
ZOBACZ TAKŻE
INFORMACJE O TŁUMACZENIU
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:
man --locale=C 2 getpriority
Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages-pl/.