sched_setscheduler(2) System Calls Manual sched_setscheduler(2) NAZWA sched_setscheduler, sched_getscheduler - ustawia i pobiera algorytm/parametry szeregowania zadan BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param); int sched_getscheduler(pid_t pid); OPIS Wywolanie systemowe sched_getscheduler ustawia zarowno algorytm jak i parametry szeregowania zadan watku, ktorego identyfikator podano w pid. Jesli pid jest rowne zeru, to ustawiany jest algorytm i parametry szeregowania zadan watku wywolujacego. Parametry szeregowania zadan sa okreslane w argumencie param, ktory jest wskaznikiem do struktury w nastepujacej postaci: struct sched_param { ... int sched_priority; ... }; W biezacej implementacji, struktura zawiera tylko jedno pole: sched_priority. Interpretacja param zalezy od wybranego algorytmu. Obecnie, Linux obsluguje nastepujace ,,zwykle" (tj. nie czasu rzeczywistego) algorytmy szeregowania zadan, ktore mozna podac jako wartosci policy: SCHED_OTHER standardowy algorytm dzielenia czasu za pomoca szeregowania rotacyjnego; SCHED_BATCH do wykonywania procesow w stylu ,,wsadowym" oraz SCHED_IDLE do uruchamiania zadan tla, o bardzo niskim priorytecie. Dla kazdego z powyzszych algorytmow, param->sched_priority musi wynosic 0. Obslugiwane sa rowniez rozne algorytmy ,,czasu rzeczywistego", nadajace sie do specjalnych aplikacji, gdzie krytyczna jest precyzyjna kontrola nad sposobem, w jaki dzialajace watki sa wybierane do wykonania. Aby dowiedziec sie wiecej o zasadach regulujacych okolicznosci, w jakich watki procesu moga uzywac tych algorytmow, nalezy zapoznac sie z podrecznikiem sched(7). Algorytmy czasu rzeczywistego, jakie mozna okreslic w policy to: SCHED_FIFO algorytm: pierwszy na wejsciu, pierwszy na wyjsciu oraz SCHED_RR szeregowanie rotacyjne (karuzelowe). Dla kazdego z powyzszych algorytmow, param->sched_priority okresla priorytet szeregowania zadan dla watku. Jest to liczba w zakresie zwracanym przez wywolanie sched_get_priority_min(2) i sched_get_priority_max(2) z podanym policy. W Linuksie te wywolania systemowe zwracaja, odpowiednio: 1 i 99. Od Linuksa 2.6.32, znacznik SCHED_RESET_ON_FORK moze byc zsumowany logicznie (OR) w policy, przy wywolywaniu sched_setscheduler(). Dzieki podaniu tego znacznika, potomkowie utworzeni przez fork(2) nie dziedzicza uprzywilejowanych algorytmow szeregowania zadan. Wiecej informacji w podreczniku sched(7). sched_getscheduler() zwraca biezacy algorytm szeregowania zadan, ktory dotyczy watku okreslonego przez pid. Jesli pid jest rowne zeru, to pobierany jest algorytm dotyczacy watku wywolujacego. WARTOSC ZWRACANA Po pomyslnym zakonczeniu, sched_setscheduler() zwraca zero. Po pomyslnym zakonczeniu, sched_getscheduler zwraca algorytm dotyczacy watku (nieujemna liczba calkowita). Po bledzie, oba wywolania zwracaja -1 i ustawiaja errno wskazujac blad. BLEDY EINVAL Nieprawidlowe argumenty: pid jest ujemne lub param wynosi NULL. EINVAL (sched_setscheduler()) policy nie jest jednym ze znanych algorytmow. EINVAL (sched_setscheduler()) param nie ma sensu w podanym policy. EPERM Watek wywolujacy nie ma odpowiednich przywilejow. ESRCH Nie znaleziono watku o identyfikatorze rownym pid. WERSJE POSIX.1 nie okresla szczegolowo, jakich uprawnien wymaga watek nieuprzywilejowany, do wywolania sched_setscheduler(), a detale te roznia sie miedzy systemami. Przykladowo, strona podrecznika systemu Solaris 7 informuje, ze rzeczywisty lub efektywny identyfikator uzytkownika wywolujacego musi odpowiadac rzeczywistemu identyfikatorowi uzytkownika lub zapisanemu set-user-ID celu. Algorytm i parametry szeregowania zadan sa w Linuksie w rzeczywistosci atrybutami przypisanymi watkowi. Wartosc zwracana przez wywolanie gettid(2) mozna przekazac w argumencie pid. Podanie pid rownego 0 bedzie oznaczalo dzialanie na atrybutach watku wywolujacego, a przekazanie wartosci zwroconej przez wywolanie getpid(2), bedzie oznaczalo dzialanie na atrybutach glownego watku w grupie watku (jesli korzysta sie z interfejsu programistycznego watkow POSIX, nalezy korzystac z pthread_setschedparam(3), pthread_getschedparam(3) i pthread_setschedprio(3), zamiast z wywolan systemowych sched_*(2)). STANDARDY POSIX.1-2024 (lecz zob. USTERKI ponizej). SCHED_BATCH() i SCHED_IDLE() sa typowo linuksowe. HISTORIA POSIX.1-2001. UWAGI Dalsze szczegoly odnosnie semantyki wszystkich powyzszych algorytmow szeregowania zadan ,,zwyklych" i ,,czasu rzeczywistego" opisano w podreczniku systemowym sched(7). Zawarto tam takze opis dodatkowego algorytmu, SCHED_DEADLINE, ktory mozna ustawic jedynie za pomoca sched_setattr(2). Systemy POSIX-owe, na ktorych dostepne sa sched_setscheduler() i sched_getscheduler(), definiuja w _POSIX_PRIORITY_SCHEDULING. USTERKI POSIX.1 wskazuje, ze przy powodzeniu, sched_setscheduler() powinno zwrocic poprzedni algorytm szeregowania zadan. sched_setscheduler() w Linuksie nie jest zgodne z tym wymaganiem, poniewaz w przypadku powodzenia zawsze zwraca 0. ZOBACZ TAKZE 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) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: 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.17 8 lutego 2026 r. sched_setscheduler(2)