getpriority
Table des matières
Retour à l'index
NOM
getpriority, setpriority - Lire et écrire la priorité d'ordonnancement du
processus
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <sys/resource.h>
int getpriority(int which, id_t who);
int setpriority(int which, id_t who, int prio);
DESCRIPTION
La priorité d'ordonnancement du processus, du groupe de processus ou de
l'utilisateur, comme précisé dans which et who est lue avec l'appel
getpriority() et définie avec l'appel setpriority(). L'attribut du
processus concerné par ces appels système est le même que celui géré par
nice(2) (appelé aussi la valeur « de politesse »).
La valeur de which doit être PRIO_PROCESS, PRIO_PGRP ou
PRIO_USER, et who est interprété en fonction de which (un ID de
processus pour PRIO_PROCESS, un ID de groupe de processus pour
PRIO_PGRP et un ID d'utilisateur pour PRIO_USER). Une valeur nulle
pour who indique (respectivement) le processus appelant, le groupe de
processus du processus appelant ou l'UID réel du processus appelant.
Le paramètre prio est une valeur sur l'intervalle -20 à 19 (mais
voir les NOTES ci-dessous), où -20 est la priorité la plus élevée et
19 celle la plus basse. Les valeurs pour définir une priorité en dehors
de cet intervalle sont silencieusement ramenées dans l'intervalle. La
priorité par défaut est 0 ; les valeurs les plus basses donnent au
processus une priorité d'ordonnancement plus élevée.
La fonction getpriority() renvoie la plus haute priorité (la plus basse
valeur numérique) dont bénéficie l'un des processus indiqué. La fonction
setpriority() positionne la priorité des processus indiqués à la valeur
fournie.
Traditionnellement, seul un processus privilégié pouvait diminuer la valeur
de courtoisie (c'est-à-dire augmenter la priorité). Mais depuis Linux 2.6.12, un processus non privilégié peut diminuer la valeur de courtoisie
d'un processus cible ayant une limite souple RLIMIT_NICE convenable ;
voir getrlimit(2) pour des détails.
VALEUR RENVOYÉE
S'il réussit, setpriority() renvoie la valeur de courtoisie du thread
appelant, qui peut être un nombre négatif. En cas d'erreur, il renvoie -1
et positionne errno pour indiquer l'erreur.
Puisqu'un appel à getpriority() peut tout à fait renvoyer la valeur
-1, il faut effacer errno avant l'appel afin de vérifier si -1
indique une erreur ou une priorité légitime.
S'il réussit, setpriority() renvoie 0. En cas d'erreur, il renvoie
-1 et positionne errno pour indiquer l'erreur.
ERREURS
- EACCES
-
L'appelant a tenté de définir une valeur de politesse plus basse
(c'est-à-dire une priorité de processus plus élevée) mais il n'a pas les
droits requis (sur Linux : il n'a pas la capacité CAP_SYS_NICE).
- EINVAL
-
which n'était ni PRIO_PROCESS, ni PRIO_PGRP, ni PRIO_USER.
- EPERM
-
Un processus correspond bien aux valeurs indiquées, mais ni l'UID réel, ni
l'UID effectif de l'appelant ne correspondent à l'UID effectif de ce
processus, et (sur les systèmes Linux l'appelant n'a pas la capacité
CAP_SYS_NICE). Voir les NOTES ci-dessous.
- ESRCH
-
Aucun processus ne correspond aux valeurs de which et who indiquées.
STANDARDS
POSIX.1-2008.
HISTORIQUE
POSIX.1-2001, SVr4, 4.4BSD (ces interfaces sont apparues pour la première
fois dans 4.2BSD).
NOTES
Pour plus de détails sur la valeur de courtoisie, voir sched(7).
Remarque : l'ajout de la fonctionnalité « autogroup » à Linux 2.6.38
signifie que la valeur de courtoisie n'a plus son effet traditionnel dans de
nombreuses circonstances. Pour des détails, voir sched(7).
Un enfant créé avec fork(2) hérite de la valeur de politesse de son
parent. La valeur de politesse est préservée au travers d'un execve(2).
Les détails concernant la condition d'erreur EPERM dépendent du
système. La description ci-dessus concerne ce que dit POSIX.1-2001, et
qui semble être suivi par tous les systèmes de type System V. Les noyaux
Linux avant Linux 2.6.12 demandent que l'UID réel ou effectif de l'appelant
correspondent à l'UID réel du processus who (et non pas à son UID
effectif). Linux 2.6.12 et suivants demandent que l'UID effectif de
l'appelant corresponde à l'UID réel ou effectif du processus who. Tous
les systèmes de type BSD (SunOS 4.1.3, Ultrix 4.2, BSD 4.3, FreeBSD 4.3,
OpenBSD-2.5, ...) se comportent de la même manière que Linux 2.6.12 et les
suivants.
Différences entre bibliothèque C et noyau
L'appel système getpriority renvoie les valeurs de courtoisie traduites dans
l'intervalle 40..1, puisqu'une valeur négative renvoyée serait interprétée
comme une erreur. La fonction enveloppe de la glibc autour de
getpriority() traduit la valeur en sens inverse, selon la formule
unice = 20 - knice (ainsi, l'intervalle 40..1 renvoyé par le noyau
correspond à celui -20..19 vu depuis l'espace utilisateur).
BOGUES
Selon la norme POSIX, la valeur de politesse est définie à l'échelle du
processus. Cependant, les threads POSIX sont actuellement implémentés dans
Linux/NPTL de telle sorte que la valeur de politesse est un attribut du
thread : différents threads d'un même processus peuvent avoir des valeurs de
politesse différentes. Les applications portables doivent donc éviter de
s'appuyer sur cette propriété de Linux, qui devrait, à l'avenir, être mise
en conformité avec les normes.
VOIR AUSSI
nice(1), renice(1), fork(2), capabilities(7), sched(7)
Documentation/scheduler/sched-nice-design.txt dans les sources du noyau
(depuis Linux 2.6.23)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>,
Cédric Boutillier <cedric.boutillier@gmail.com>,
Frédéric Hantrais <fhantrais@gmail.com>
et
Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- HISTORIQUE
-
- NOTES
-
- Différences entre bibliothèque C et noyau
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:05 GMT, September 19, 2025