GETPRIORITY(2)

NOM
getpriority, setpriority - Lire et écrire la priorité d'ordonnancement du processus

SYNOPSIS
#include <sys/time.h>
#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 une valeur de politesse (c'est-à-dire définir une priorité plus élevée). Mais depuis Linux 2.6.12, un processus non privilégié peut abaisser la valeur de politesse d'un processus cible ayant la bonne limite logicielle RLIMIT_NICE ; voir getrlimit(2) pour les détails.

VALEUR RENVOYÉE
En cas de succès, getpriority() renvoie la valeur de politesse du thread appelant, qui peut être un nombre négatif. En cas d'erreur, il renvoie -1 et il positionne errno pour indiquer la cause de l'erreur. Comme en cas de succès getpriority() peut tout à fait renvoyer la valeur -1, il faut effacer la variable externe errno avant l'appel afin de vérifier si -1 indique une erreur ou une priorité légitime.

S'il réussit, setpriority() renvoie zéro. En cas d'erreur, il renvoie -1 et positionne errno pour indiquer la cause de l'erreur.

ERREURS

EINVAL
    which n'était ni PRIO_PROCESS, ni PRIO_PGRP, ni PRIO_USER.

ESRCH
    Aucun processus ne correspond aux valeurs de which et who indiquées.

De plus setpriority() peut échouer pour les erreurs suivantes :

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).

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.

CONFORMITÉ
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (ces interfaces sont apparues pour la première fois dans 4.2BSD).

NOTES
Pour les détails sur la valeur de politesse, voir sched(7).

Note : l'ajout de la fonction « autogroup » à Linux 2.6.38 signifie que la valeur de priorité 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 antérieurs à 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.

L'inclusion de <sys/time.h> n'est plus obligatoire, mais améliore la portabilité. (En fait, <sys/resource.h> définit la structure rusage qui contient des champs de type struct timeval, défini dans <sys/time.h>.)

  différences entre bibliothèque C et noyau
Dans le noyau, les valeurs de politesse sont représentées dans l'intervalle [40,1] (les nombres négatifs sont des codes d'erreurs), et ce sont ces valeurs qui sont utilisées par les appels système setpriority() et getpriority(). Les routines de la bibliothèque glibc se chargent des conversions entre les représentations dans le noyau et dans l'espace utilisateur grâce à la formule unice = 20 - knice. (De cette façon, l'intervalle [40,1] du noyau correspond à l'intervalle [-20,19] dans 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)

COLOPHON
Cette page fait partie de la publication 5.08 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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 à <debian-l10n-french@lists.debian.org>.