getpriority(2)

NUME
getpriority, setpriority - obține/stabilește prioritatea de planificare a programului

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <sys/resource.h>

int getpriority(int which, id_t who);
int setpriority(int which, id_t who, int prio);

DESCRIERE
Prioritatea de planificare a procesului, a grupului de procese sau a utilizatorului, așa cum este indicată de which și who, se obține cu apelul getpriority() și se stabilește cu apelul setpriority(). Atributul de proces tratat de aceste apeluri de sistem este același atribut (cunoscut și sub numele de valoare „de curtoazie” (nice)) care este tratat de nice(2).

Valoarea which este una dintre PRIO_PROCESS, PRIO_PGRP sau PRIO_USER, iar who este interpretată în raport cu which (un identificator de proces pentru PRIO_PROCESS, un identificator de grup de proces pentru PRIO_PGRP și un ID de utilizator pentru PRIO_USER). O valoare zero pentru who denotă (respectiv) procesul apelant, grupul de procese al procesului apelant sau ID-ul real de utilizator al procesului apelant.

Argumentul prio este o valoare cuprinsă între -20 și 19 (a se vedea secțiunea NOTE de mai jos), -20 fiind cea mai mare prioritate și 19 cea mai mică prioritate. Încercările de a stabili o prioritate în afara acestui interval sunt fixate în mod silențios în intervalul respectiv. Prioritatea implicită este 0; valorile mai mici conferă unui proces o prioritate de planificare mai mare.

Apelul getpriority() returnează cea mai mare prioritate (cea mai mică valoare numerică) de care se bucură oricare dintre procesele specificate. Apelul setpriority() stabilește prioritățile tuturor proceselor specificate la valoarea specificată.

În mod tradițional, numai un proces privilegiat putea să reducă valoarea „nice” (adică să stabilească o prioritate mai mare). Cu toate acestea, începând cu Linux 2.6.12, un proces neprivilegiat poate scădea valoarea „nice” a unui proces țintă care are o limită flexibilă RLIMIT_NICE adecvată; pentru detalii, consultați getrlimit(2).

VALOAREA RETURNATĂ
În caz de succes, getpriority() returnează valoarea de curtoazie „nice” a firului apelant, care poate fi un număr negativ. În caz de eroare, returnează -1 și configurează errno pentru a indica eroarea.

Deoarece un apel reușit la getpriority() poate returna în mod legitim valoarea -1, este necesar să se elibereze errno înainte de apel, apoi să se verifice errno după aceea pentru a determina dacă -1 este o eroare sau o valoare legitimă.

setpriority() returnează 0 în caz de succes, În caz de eroare, returnează -1 și configurează errno pentru a indica eroarea.

ERORI-IEȘIRE

EACCES
    Apelantul a încercat să stabilească o valoare de curtoazie „nice” mai mică (de exemplu, o prioritate mai mare a procesului), dar nu avea privilegiul necesar (în Linux: nu avea capacitatea CAP_SYS_NICE).

EINVAL
    which nu a fost una dintre PRIO_PROCESS, PRIO_PGRP sau PRIO_USER.

EPERM
    A fost localizat un proces, dar ID-ul său efectiv de utilizator nu corespundea nici cu ID-ul efectiv, nici cu cel real al apelantului și nu era privilegiat (în Linux: nu avea capacitatea CAP_SYS_NICE). Dar consultați secțiunea ISTORIC de mai jos.

ESRCH
    Nu a fost localizat niciun proces folosind valorile which și who specificate.

STANDARDE
POSIX.1-2024.

ISTORIC
POSIX.1-2001 SVr4, 4.4BSD (aceste apeluri de sistem au apărut pentru prima dată în 4.2BSD).

Detaliile privind condiția pentru EPERM depind de sistem. Descrierea de mai sus este ceea ce spune POSIX.1-2001 și se pare că este urmată pe toate sistemele de tip System V. Nucleele Linux înainte de Linux 2.6.12 cereau ca ID-ul de utilizator real sau efectiv al apelantului să corespundă cu cel al utilizatorului real al procesului who (în loc de ID-ul de utilizator efectiv al acestuia). Linux 2.6.12 și versiunile ulterioare impun ca ID-ul efectiv al utilizatorului apelantului să corespundă cu ID-ul real sau efectiv al utilizatorului procesului who. Toate sistemele de tip BSD (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, FreeBSD 4.3, OpenBSD-2.5, ...) se comportă în același mod ca și Linux 2.6.12 și versiunile ulterioare.

NOTE
Pentru mai multe detalii cu privire la această valoare „nice”, a se vedea sched(7).

Notă: adăugarea caracteristicii „autogroup” în Linux 2.6.38 înseamnă că valoarea de curtoazie „nice” nu mai are efectul său tradițional în multe situații. Pentru detalii, a se vedea sched(7).

Un proces-copil creat de fork(2) moștenește valoarea de curtoazie „nice” a părintelui său. Această valoare este păstrată în execve(2).

  Diferențe între biblioteca C și nucleu
Apelul de sistem getpriority returnează valori de curtoazie „nice” traduse în intervalul 40...1, deoarece o valoare de returnare negativă ar fi interpretată ca o eroare. Funcția de învăluire glibc pentru getpriority() traduce valoarea înapoi conform formulei unice = 20 - knice (astfel, intervalul 40..1 returnat de nucleu corespunde intervalului -20..19, așa cum este văzut de spațiul utilizatorului).

ERORI
În conformitate cu POSIX, valoarea de curtoazie „nice” este un atribut pentru fiecare proces în parte. Cu toate acestea, în cadrul implementării actuale Linux/NPTL a firelor POSIX, valoarea de curtoazie este un atribut per fir: diferite fire din același proces pot avea valori de curtoazie diferite. Aplicațiile portabile ar trebui să evite să se bazeze pe comportamentul Linux, care ar putea deveni conform cu standardele în viitor.

CONSULTAȚI ȘI
nice(1), renice(1), fork(2), capabilities(7), sched(7)

Documentation/scheduler/sched-nice-design.txt în arborele sursă al nucleului Linux (începând cu Linux 2.6.23)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.