Vous devez analyser les données de /proc/<PID>/stat
. Ce sont les premiers champs (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 à ça :
cpu 192369 7119 480152 122044337 14142 9937 26747 0 0
Cela vous indique le temps cumulé du processeur qui a été utilisé dans diverses catégories, en unités de jiffies. Vous devez prendre la somme des valeurs de cette ligne pour obtenir une valeur de 1 million d'euros. time_total
mesure.
Lire les deux utime
y stime
pour le processus qui vous intéresse, et lire time_total
de /proc/stat
. Puis dormez pendant une seconde ou deux, et relisez-les tous. Vous pouvez maintenant calculer l'utilisation du CPU du processus pendant le temps 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);
C'est logique ?
0 votes
Qu'en est-il de la capture (grep-ing) de la sortie de top.
0 votes
Ce n'est vraiment pas la meilleure façon d'être efficace;y
0 votes
Il faudra probablement un appel système "coûteux" pour lancer "top".
0 votes
@Liran : Bien dit :)
0 votes
Oubliez cette façon de faire .... en C
0 votes
Pas en double, mais en relation stackoverflow.com/questions/4450961/
0 votes
Top cherche essentiellement dans /proc/$pid/ pour cmdline et stat. Cela ressemble à peu près à ce que ferait 'ps'. Ce qui rend top coûteux est le délai par défaut de 3 secondes. Utilisez 'top -b -n 2 -d 30' pour regarder le %CPU normalisé des processus sur un intervalle de 30 secondes.
0 votes
Vous pouvez toujours cloner le code source de top et ps et faire votre propre truc.