Devi analizzare i dati da /proc/<PID>/stat
. Questi sono i primi campi (da Documentation/filesystems/proc.txt
nel sorgente del kernel):
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
Probabilmente stai cercando utime
e/o stime
. Dovrai anche leggere il cpu
riga da /proc/stat
, che assomiglia a:
cpu 192369 7119 480152 122044337 14142 9937 26747 0 0
Questo ti dice il tempo cumulativo della CPU che è stato utilizzato in varie categorie, in unità di jiffies. Devi prendere la somma dei valori su questa riga per ottenere un time_total
misura.
Leggi entrambi utime
e stime
per il processo che ti interessa e leggi time_total
da /proc/stat
. Quindi dormi per un secondo o giù di lì e rileggili tutti di nuovo. Ora puoi calcolare l'utilizzo della CPU del processo durante il tempo di campionamento, con:
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);
Ha senso?
getrusage() può aiutarti a determinare l'utilizzo del processo corrente o del suo figlio
Aggiornamento: Non ricordo un'API. Ma tutti i dettagli saranno in /proc/PID /stat, quindi se potessimo analizzarlo, potremmo ottenere la percentuale.
MODIFICA: Poiché la percentuale di CPU non è semplice da calcolare, è possibile utilizzare il campionamento di cose qui. Leggi ctime e utime per un PID in un determinato momento e rileggi gli stessi valori dopo 1 sec. Trova la differenza e dividi per cento. Otterrai l'utilizzo per quel processo per oltre un secondo.
(potrebbe diventare più complesso se ci sono molti processori)