Vous devez analyser les données de /proc/<PID>/stat
. Ce sont les premiers champs (à partir de Documentation/filesystems/proc.txt
dans les sources de votre noyau) :
Table 1-3: Contents of the stat files (as of 2.6.22-rc3)
..............................................................................
Field Content
pid process id
tcomm filename of the executable
state state (R is running, S is sleeping, D is sleeping in an
uninterruptible wait, Z is zombie, T is traced or stopped)
ppid process id of the parent process
pgrp pgrp of the process
sid session id
tty_nr tty the process uses
tty_pgrp pgrp of the tty
flags task flags
min_flt number of minor faults
cmin_flt number of minor faults with child's
maj_flt number of major faults
cmaj_flt number of major faults with child's
utime user mode jiffies
stime kernel mode jiffies
cutime user mode jiffies with child's
cstime kernel mode jiffies with child's
Vous êtes probablement après utime
et/ou stime
. Vous devrez également lire le cpu
ligne de /proc/stat
, qui ressemble à :
cpu 192369 7119 480152 122044337 14142 9937 26747 0 0
Cela vous indique le temps CPU cumulé qui a été utilisé dans diverses catégories, en unités de jiffies. Vous devez prendre la somme des valeurs sur cette ligne pour obtenir un time_total
mesurer.
Lire les deux utime
et stime
pour le processus qui vous intéresse, et lisez time_total
à partir de /proc/stat
. Ensuite, dormez une seconde environ et lisez-les tous à nouveau. Vous pouvez maintenant calculer l'utilisation CPU du processus sur la durée d'échantillonnage, avec :
user_util = 100 * (utime_after - utime_before) / (time_total_after - time_total_before);
sys_util = 100 * (stime_after - stime_before) / (time_total_after - time_total_before);
Ça a du sens ?
getrusage() peut vous aider à déterminer l'utilisation du processus actuel ou de son enfant
Mise à jour : Je ne me souviens pas d'une API. Mais tous les détails seront dans /proc/PID /stat, donc si nous pouvions l'analyser, nous pouvons obtenir le pourcentage.
MODIF : Étant donné que le pourcentage de CPU n'est pas simple à calculer, vous pouvez utiliser ici un type d'échantillonnage. Lire ctime et utime pour un PID à un moment donné et relire les mêmes valeurs après 1 sec. Trouvez la différence et divisez par cent. Vous obtiendrez une utilisation de ce processus pendant une seconde.
(peut devenir plus complexe s'il y a plusieurs processeurs)