Ich möchte die CPU-Auslastungsstatistiken aus einem C-Programm lesen. Ich interessiere mich für den Prozentsatz der CPU-Auslastung, die Diebstahlzeit usw. Diese Statistiken werden in der 3. Zeile des top
Befehls angezeigt .
Ich habe versucht, top
die Ausgabe mit awk
( top -n 1 -b | awk '{print $0}'
) zu analysieren , aber es scheint, dass top
immer die gleichen 'fiktiven' Werte angezeigt werden, bevor die korrekten Statistiken angezeigt werden.
Gibt es einen Weg vom Code oder durch Parsen der Ausgabe eines Befehls, um die CPU-Auslastungsstatistiken zu erhalten?
Bearbeiten:
Die Plattform ist Linux
Vielen Dank.
monitoring
cpu
c
top
0xFF
quelle
quelle
Antworten:
Sie möchten die ersten Zeilen von lesen
/proc/stat
. Sie müssen es zweimal im Abstand von einer gemessenen Zeit lesen und den ersten Satz von Zahlen vom zweiten abziehen. Die Linien sehen so aus:Die erste Zeile ist für alle Kerne aggregiert. Die nächsten Zeilen zeigen jeden Kern. Wenn Sie die Zeile sehen, die mit beginnt
intr
, müssen Sie das Parsen beenden.Jede Zahl gibt an, wie viel Zeit die CPU in einem bestimmten Zustand verbracht hat. Die Einheiten sind typischerweise Hundertstelsekunden. Die Felder sind
user
,nice
,system
,idle
,iowait
,irq
,softirq
,steal
,guest
, undguest_nice
.Die maßgebliche Dokumentation ist natürlich der Quellcode. Wenn Sie eine Kopie der Linux-Kernelquelle zur Hand haben, schauen Sie sich
fs/proc/stat.c
insbesondere dieshow_stat
Funktion an.quelle
Es gibt ein Beispiel im Web, das zeigt, wie man
/proc/pid/stat
in C liest .Sie können zu zwei unterschiedlichen Zeitpunkten lesen
utime
oderstime
Werte verwenden und die gewünschten CPU-Nutzungsstatistiken berechnen. (Ich denke,top
verwendet diese Rohdaten auch.)(Ich habe vergessen: Dies ist Linux-spezifisch.)
quelle