zion - getpriority
Nom
getpriority, setpriority - Lire / écrire la priorité d'ordonnancement du processus.
Résumé
#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 fixée avec setpriority. Which doit être l'un des éléments 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 à 20 (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 a bénéficié l'un des processus indiqué. La fonction setpriority fixe la priorité des processus indiqués à la valeur fournie. Seul le Super-User 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 une valeur -1 indique une erreur ou une priorité légitime. L'appel setpriority renvoie 0 s'il réussit, ou -1 s'il échoue et remplit errno .
Erreurs
ESRCH
Aucun processus ne correspond aux valeurs de which et who indiquées. |
EINVAL Which
n'était ni PRIO_PROCESS, ni PRIO_PGRP, ni PRIO_USER. |
De plus setpriority peut échouer pour les erreurs suivantes :
EPERM
Un processus correspond bien aux valeurs indiquées, mais ni l'UID réel, ni l'UID effectif de l'appelant ne lui correspondent. |
EACCES
Tentative de favoriser un processus sans être Super-User. |
Notes
Les détails concernant la condition d'erreur EPERM dépendent du système. La description ci-dessus concerne ce que dit SUSv3, et qui semble être suivi par tous les systèmes de type SysV. Linux demande que l'UID réel ou effectif de l'appelant correspondent à l'UID réel du processus who (et non pas à son UID effectif). Tous les systèmes de type BSD (SunOS 4.1.3, Ultrix 4.2 BSD 4.3, FreeBSD 4.3, OpenBSD-2.5...) demandent que l'UID effectif de l'appelant corresponde à l'UID réel ou effectif du processus who.
Le véritable intervalle des priorités varie suivant les versions du noyau. Sur les systèmes Linux antérieure au 1.3.36 l'intervalle s'étendait de -infini à 15. Depuis le 1.3.43 il correspond à -20..19, et l'appel-système getpriority renvoie 40..1 pour ces valeurs (puisque les nombres négatifs sont des codes d'erreur). La routine de bibliothèque convertit N en 20-N.
L'inclusion <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 <sys/time.h> ).
Conformité
SVr4, BSD 4.4 (Cette fonction est apparue dans BSD 4.2).
Voir aussi
nice (1), fork (2), renice (8).
Traduction
Christophe Blaess, 1996-2003.
Poster un commentaire