getrusage - Lire l'utilisation des ressources
Bibliothèque C standard (
libc,
-lc)
#include <sys/resource.h>
int getrusage(int who, struct rusage *usage);
getrusage() renvoie la mesure de l'utilisation des ressources pour
who, qui peut valoir une des valeurs suivantes :
- RUSAGE_SELF
- Renvoyer les statistiques d'utilisation des ressources pour
le processus appelant, ce qui correspond à la somme des ressources
utilisées par tous les processus légers ( threads) du
processus.
- RUSAGE_CHILDREN
- Renvoyer les statistiques d'utilisation des ressources pour
tous les processus fils du processus appelant qui se sont terminés
et dont la fin a été attendue (avec wait(2)). Ces
statistiques incluront les ressources utilisées par les
petits-enfants, et autres descendants déjà retirés si
tous les descendants en question ont attendu la fin de leurs enfants.
-
RUSAGE_THREAD (depuis Linux 2.6.26)
- Renvoyer les statistiques d'utilisation des ressources pour
le thread appelant. La macro de test de fonctionnalité
_GNU_SOURCE doit être définie préalablement
(avant l'inclusion d'un fichier d'en-tête) afin d'obtenir la
définition de cette constante à partir de
<sys/resource.h>.
L'utilisation des ressources est renvoyée dans la structure
pointée par
usage, qui est de la forme suivante :
struct rusage {
struct timeval ru_utime; /* Temps CPU utilisateur écoulé */
struct timeval ru_stime; /* Temps CPU système écoulé */
long ru_maxrss; /* Taille résidente maximale */
long ru_ixrss; /* Taille de mémoire partagée */
long ru_idrss; /* Taille des données non partagées */
long ru_isrss; /* Taille de pile */
long ru_minflt; /* Demandes de pages (soft) */
long ru_majflt; /* Nombre de fautes de pages (hard) */
long ru_nswap; /* Nombre de swaps */
long ru_inblock; /* Nombre de lectures de blocs */
long ru_oublock; /* Nombre d'écritures de blocs */
long ru_msgsnd; /* Nombre de messages IPC émis */
long ru_msgrcv; /* Nombre de messages IPC reçus */
long ru_nsignals; /* Nombre de signaux reçus */
long ru_nvcsw; /* Chgmnts de contexte volontaires */
long ru_nivcsw; /* Chgmnts de contexte involontaires*/
};
Tous les champs ne sont pas complètement remplis ; les champs non
maintenus sont mis à zéro par le noyau (les champs non maintenus
sont fournis pour assurer la compatibilité avec d'autres
systèmes, et parce qu'ils pourraient un jour être
supportés par Linux). Ces champs ont la signification suivante :
- ru_utime
- Temps total passé en mode utilisateur, mis dans une
structure timeval (secondes et microsecondes).
- ru_stime
- Temps total passé en mode noyau, mis dans une
structure timeval (secondes et microsecondes).
-
ru_maxrss (depuis Linux 2.6.32)
- Taille maximale de mémoire résidente
utilisée (en kilooctets). Pour RUSAGE_CHILDREN, il s'agit de
la taille résidente du fils le plus grand, et non de la taille
résidente maximale du processus.
-
ru_ixrss (non maintenu)
- Ce champ n'est actuellement pas utilisé par
Linux.
-
ru_idrss (non maintenu)
- Ce champ n'est actuellement pas utilisé par
Linux.
-
ru_isrss (non maintenu)
- Ce champ n'est actuellement pas utilisé par
Linux.
- ru_minflt
- Le nombre d'erreurs de pagination (page fault) sans
activité d'entrées-sorties. Ici, cette activité est
empêchée en réclamant une page qui se trouve dans la
liste des pages qui attendent d'être réallouées.
- ru_majflt
- Le nombre d'erreurs de pagination avec activité
d'entrées-sorties.
-
ru_nswap (non maintenu)
- Ce champ n'est actuellement pas utilisé par
Linux.
-
ru_inblock (depuis Linux 2.6.22)
- Le nombre de fois où le système de fichiers a
dû traiter des entrées.
-
ru_oublock (depuis Linux 2.6.22)
- Le nombre de fois où le système de fichiers a
dû traiter des sorties.
-
ru_msgsnd (non maintenu)
- Ce champ n'est actuellement pas utilisé par
Linux.
-
ru_msgrcv (non maintenu)
- Ce champ n'est actuellement pas utilisé par
Linux.
-
ru_nsignals (non maintenu)
- Ce champ n'est actuellement pas utilisé par
Linux.
-
ru_nvcsw (depuis Linux 2.6)
- Le nombre de changements de contexte provoqués par
un processus qui abandonne volontairement le processeur avant la fin de la
tranche de temps qui lui est dévolue (habituellement pour attendre
la disponibilité d'une ressource).
-
ru_nivcsw (depuis Linux 2.6)
- Le nombre de changements de contexte provoqués par
un processus de plus grande priorité qui devient disponible
à l'exécution, ou parce que le processus actuel a
dépassé le temps limite qui lui était
alloué.
En cas de succès, zéro est renvoyé. En cas d'erreur,
-1 est renvoyé et
errno est définie pour
préciser l'erreur.
- EFAULT
-
usage pointe en dehors de l'espace d'adressage
disponible.
- EINVAL
-
who est invalide.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
getrusage() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. POSIX.1 spécifie
getrusage(), mais spécifie seulement les champs
ru_utime
et
ru_stime.
RUSAGE_THREAD est spécifique à Linux.
Les mesures de l'utilisation des ressources sont conservées au travers
d'un
execve(2).
Avant Linux 2.6.9, si le traitement de
SIGCHLD est
configuré avec
SIG_IGN, les statistiques d'utilisation des
processus enfants sont automatiquement incluses dans les valeurs
renvoyées par
RUSAGE_CHILDREN, bien que POSIX.1-2001 interdise
explicitement cela. Cette non conformité est corrigée sous
Linux 2.6.9 et ultérieurs.
La définition de la structure fournie au début de cette page
provient de 4.3BSD Reno.
Des systèmes anciens fournissaient une fonction
vtimes() qui
remplissait le même rôle que
getrusage(). Pour des
raisons de compatibilité ascendante, la glibc (jusqu'à
Linux 2.32) fournit aussi une fonction
vtimes(). Toutes les
nouvelles applications devraient utiliser
getrusage() (depuis la
Linux 2.33, la glibc ne fournit plus d'implémentation de
vtimes()).
Consultez aussi la description de
/proc/pid
/stat dans
proc(5).
clock_gettime(2),
getrlimit(2),
times(2),
wait(2),
wait4(2),
clock(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]>,
Frédéric Hantrais <
[email protected]> et Jean-Philippe
MENGUAL <
[email protected]>
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 à
[email protected]