NOM
getpriority, setpriority - Lire/écrire la priorité d’ordonnancement du
processus
SYNOPSIS
#include <sys/time.h>
#include <sys/resource.h>
int getpriority(int which, int who);
int setpriority(int which, int who, int prio);
La priorité d’ordonnancement du processus, du groupe de processus ou de
l’utilisateur, comme précisé dans which et who est lue avec
getpriority() et fixée avec setpriority().
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 de
l’appelant ou l’UID réel du processus appelant. Prio est une valeur
dans l’intervalle -20 à 19 (voir les Notes plus bas). La priorité par
défaut est 0, les priorités les plus faibles indiquant un
ordonnancement le plus favorable.
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() fixe la priorité des processus indiqués à la
valeur fournie. Seul le superutilisateur peut diminuer la valeur
numérique de la priorité.
VALEUR RENVOYÉE
Comme 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. L’appel setpriority()
renvoie 0 s’il réussit, ou -1 s’il échoue.
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 diminuer la priorité d’un processus, sans
avoir les privilèges requis (sous Linux, il s’agit de la
capacité CAP_SYS_NICE). Depuis Linux 2.6.12, cette erreur ne
survient que si l’appelant tente de fixer la priorité en‐dehors
de la plage permise par la limite souple RLIMIT_NICE du
processus cible ; voir getrlimit(2) pour plus de détails.
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É
SVr4, BSD 4.4 (ces fonctions sont apparues dans BSD 4.2), POSIX.1-2001.
NOTES
Un fils créé avec fork(2) hérite de la valeur de courtoisie de son
père. La valeur de courtoisie est préservée au travers d’un execve(2).
L’importance des variations d’ordonnancement des processus suivant
leurs valeurs de courtoisies respectives dépend des systèmes Unix et
pour Linux, dépend de la version du noyau. Depuis le noyau 2.6.23,
Linux emploie un algorithme rendant plus sensibles les variations de
courtoisies. Les valeurs de courtoisies élevées (+19) ne laissent que
très peu de temps CPU à un processus si d’autres programmes, plus
prioritaires, réclament le processeur. Inversement, les valeurs de
courtoisie basses (-20) fournissent beaucoup de temps CPU aux tâches
qui en ont besoin (par exemple, certaines applications audio).
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.
Le véritable intervalle des priorités varie suivant les versions du
noyau. Sur les systèmes Linux antérieurs à 1.3.36, l’intervalle
s’étendait de -infini à 15. Depuis la version 1.3.43 l’intervalle est
-20..19. 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.
Sur certains systèmes, les valeurs de politesse vont de -20 à 20.
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>).
VOIR AUSSI
nice(1), fork(2), capabilities(7), renice(8)
Documentation/scheduler/sched-nice-design.txt dans les sources du noyau
(depuis Linux 2.6.23).
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».