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, int who);
int setpriority(int which, int 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
getpriority() et définit 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() définit 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 définir la priorité
en‐dehors de la plage permise par la limite souple
RLIMIT_NICE du processus cible ; consultez
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.
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>).
BOGUES¶
Selon la norme POSIX, la valeur de courtoisie (nice) 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
courtoisie est un attribut du thread : différents threads d'un
même processus peuvent avoir des valeurs de courtoisie
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)
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.65 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».