Musíte analyzovat data z /proc/<PID>/stat
. Toto je několik prvních polí (od Documentation/filesystems/proc.txt
ve zdrojovém kódu vašeho jádra):
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
Pravděpodobně jste po utime
a/nebo stime
. Budete si také muset přečíst cpu
řádek od /proc/stat
, který vypadá takto:
cpu 192369 7119 480152 122044337 14142 9937 26747 0 0
To vám říká kumulativní čas CPU, který byl použit v různých kategoriích, v jednotkách minut. Chcete-li získat time_total
, musíte vzít součet hodnot na tomto řádku měřit.
Přečtěte si oba utime
a stime
pro proces, který vás zajímá, a přečtěte si time_total
od /proc/stat
. Pak se na chvíli vyspěte a znovu si je všechny přečtěte. Nyní můžete vypočítat využití procesoru procesu během doby vzorkování pomocí:
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);
Dává to smysl?
getrusage() vám může pomoci při určování použití aktuálního procesu nebo jeho potomka
Aktualizace: Nepamatuji si API. Všechny podrobnosti však budou v /proc/PID /stat, takže pokud bychom to mohli analyzovat, můžeme získat procento.
UPRAVIT: Protože výpočet % CPU není přímočarý, můžete zde použít vzorkování. Odečtěte ctime a utime pro PID v určitém okamžiku a po 1 sekundě znovu načtěte stejné hodnoty. Najděte rozdíl a vydělte stovkami. Získáte využití pro tento proces za poslední jednu sekundu.
(může být složitější, pokud existuje mnoho procesorů)