Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       sched_setscheduler, sched_getscheduler - ustawia i pobiera algorytm/parametry szeregowania zadań

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <sched.h>

       int sched_setscheduler(pid_t pid, int policy,
                              const struct sched_param *param);
       int sched_getscheduler(pid_t pid);

OPIS

       Wywołanie systemowe sched_getscheduler ustawia zarówno politykę jak i parametry szeregowania zadań wątku,
       którego  identyfikator  podano  w  pid. Jeśli pid jest równe zeru, to ustawiana jest polityka i parametry
       szeregowania zadań wątku wywołującego.

       Parametry szeregowania zadań są określane w argumencie param,  który  jest  wskaźnikiem  do  struktury  w
       następującej postaci:

           struct sched_param {
               ...
               int sched_priority;
               ...
           };

       W  bieżącej implementacji, struktura zawiera tylko jedno pole: sched_priority. Interpretacja param zależy
       od wybranej polityki.

       Obecnie, Linux obsługuje następujące „zwykłe” (tj. nie czasu rzeczywistego) polityki przydzielania zadań,
       które można podać jako wartości policy:

       SCHED_OTHER   standardowa polityka dzielenia czasu za pomocą planowania rotacyjnego

       SCHED_BATCH   do wykonywania procesów w stylu „wsadowym” oraz

       SCHED_IDLE    do uruchamiania zadań tła, o bardzo niskim priorytecie.

       Dla każdej z powyższych polityk, param->sched_priority musi wynosić 0.

       Obsługiwane są również różne polityki „czasu rzeczywistego”, nadające się do specjalnych aplikacji, gdzie
       krytyczna jest precyzyjna kontrola nad sposobem, w jaki działające wątki są wybierane do  wykonania.  Aby
       dowiedzieć  się  więcej  o  zasadach  regulujących  okoliczności, w jakich wątki procesu mogą używać tych
       polityk, należy zapoznać się z podręcznikiem sched(7). Polityki czasu rzeczywistego, jakie można określić
       w policy to:

       SCHED_FIFO    polityka: pierwszy na wejściu, pierwszy na wyjściu oraz

       SCHED_RR      polityka planowania rotacyjnego.

       Dla każdej z powyższych polityk, param->sched_priority określa priorytet szeregowania  zadań  dla  wątku.
       Jest to liczba w zakresie zwracanym przez wywołanie sched_get_priority_min(2) i sched_get_priority_max(2)
       z podaną policy. W Linuksie te wywołania systemowe zwracają, odpowiednio: 1 i 99.

       Od  Linuksa  2.6.32,  znacznik  SCHED_RESET_ON_FORK  może  być  zsumowany  logicznie  (OR) w policy, przy
       wywoływaniu sched_setscheduler(). Dzięki podaniu tego znacznika, potomkowie utworzeni przez  fork(2)  nie
       dziedziczą uprzywilejowanych polityk szeregowania zadań. Więcej informacji w podręczniku sched(7).

       sched_getscheduler()  zwraca  bieżącą  politykę szeregowania zadań, która dotyczy wątku określonego przez
       pid. Jeśli pid jest równe zeru, to pobierana jest polityka dotycząca wątku wywołującego.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu, sched_setscheduler() zwraca zero. Po pomyślnym zakończeniu,  sched_getscheduler
       zwraca politykę dla wątku (nieujemna liczba całkowita). Po błędzie, oba wywołania zwracają -1 i ustawiają
       errno wskazując błąd.

BŁĘDY

       EINVAL Nieprawidłowe argumenty: pid jest ujemne lub param wynosi NULL.

       EINVAL (sched_setscheduler())  policy nie jest jedną ze znanych polityk.

       EINVAL (sched_setscheduler())  param nie ma sensu w podanej policy.

       EPERM  Wątek wywołujący nie ma odpowiednich przywilejów.

       ESRCH  Nie znaleziono wątku o identyfikatorze równym pid.

WERSJE

       POSIX.1  nie  określa  szczegółowo,  jakich  uprawnień  wymaga  wątek  nieuprzywilejowany,  do  wywołania
       sched_setscheduler(), a detale te różnią się między systemami. Przykładowo,  strona  podręcznika  systemu
       Solaris  7 informuje, że rzeczywisty lub efektywny identyfikator użytkownika wywołującego musi odpowiadać
       rzeczywistemu identyfikatorowi użytkownika lub zapisanemu set-user-ID celu.

       Polityka i parametry szeregowania zadań są w Linuksie w rzeczywistości atrybutami  przypisanymi  wątkowi.
       Wartość zwracaną przez wywołanie gettid(2) można przekazać w argumencie pid. Podanie pid równego 0 będzie
       oznaczało  działanie  na  atrybutach wątku wywołującego, a przekazanie wartości zwróconej przez wywołanie
       getpid(2), będzie oznaczało działanie na atrybutach głównego wątku w grupie wątku (jeśli korzysta  się  z
       interfejsu    programistycznego    wątków    POSIX,    należy   korzystać   z   pthread_setschedparam(3),
       pthread_getschedparam(3) i pthread_setschedprio(3), zamiast z wywołań systemowych sched_*(2)).

STANDARDY

       POSIX.1-2008 (lecz zob. USTERKI poniżej).

       SCHED_BATCH() i SCHED_IDLE() są typowo linuksowe.

HISTORIA

       POSIX.1-2001.

UWAGI

       Dalsze szczegóły odnośnie semantyki wszystkich powyższych polityk szeregowania zadań „zwykłych” i  „czasu
       rzeczywistego”  opisano  w  podręczniku  systemowym sched(7). Zawarto tam także opis dodatkowej polityki,
       SCHED_DEADLINE, którą można ustawić jedynie za pomocą sched_setattr(2).

       Systemy POSIX-owe, na których  dostępne  są  sched_setscheduler()  i  sched_getscheduler(),  definiują  w
       <unistd.h> _POSIX_PRIORITY_SCHEDULING.

USTERKI

       POSIX.1   wskazuje,   że  przy  powodzeniu,  sched_setscheduler()  powinno  zwrócić  poprzednią  politykę
       szeregowania zadań. sched_setscheduler() w  Linuksie  nie  jest  zgodne  z  tym  wymaganiem,  ponieważ  w
       przypadku powodzenia zawsze zwraca 0.

ZOBACZ TAKŻE

       chrt(1), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getaffinity(2),
       sched_getattr(2), sched_getparam(2), sched_rr_get_interval(2), sched_setaffinity(2), sched_setattr(2),
       sched_setparam(2), sched_yield(2), setpriority(2), capabilities(7), cpuset(7), sched(7)

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.

Linux man-pages 6.8                              2 maja 2024 r.                            sched_setscheduler(2)