Sie müssen die Daten aus /proc/<PID>/stat
parsen . Dies sind die ersten paar Felder (ab Documentation/filesystems/proc.txt
in Ihrer Kernel-Quelle):
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
Sie sind wahrscheinlich nach utime
und/oder stime
. Sie müssen auch cpu
lesen Zeile ab /proc/stat
, das so aussieht:
cpu 192369 7119 480152 122044337 14142 9937 26747 0 0
Dies gibt Ihnen die kumulierte CPU-Zeit an, die in verschiedenen Kategorien verwendet wurde, in Einheiten von Jiffies. Sie müssen die Summe der Werte in dieser Zeile nehmen, um einen time_total
zu erhalten messen.
Lesen Sie beide utime
und stime
für den Prozess, an dem Sie interessiert sind, und lesen Sie time_total
von /proc/stat
. Dann schlafen Sie für eine Sekunde oder so und lesen Sie sie alle noch einmal. Sie können nun die CPU-Auslastung des Prozesses über die Abtastzeit berechnen, mit:
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);
Sinnvoll?
getrusage() kann Ihnen helfen, die Verwendung des aktuellen Prozesses oder seines untergeordneten Prozesses zu bestimmen
Aktualisierung: An eine API kann ich mich nicht erinnern. Aber alle Details befinden sich in /proc/PID /stat, also wenn wir es parsen könnten, könnten wir den Prozentsatz bekommen.
BEARBEITEN: Da CPU % nicht einfach zu berechnen ist, könnten Sie hier Stichproben verwenden. Lesen Sie ctime und utime für einen PID zu einem bestimmten Zeitpunkt und lesen Sie die gleichen Werte nach 1 Sekunde erneut. Finde die Differenz und teile durch Hundert. Sie werden für mehr als eine Sekunde für diesen Vorgang verwendet.
(könnte komplexer werden, wenn viele Prozessoren vorhanden sind)