Gibt es eine Möglichkeit, mit Standard-Linux/Unix-Tools festzustellen, wie viel ein Prozess im Benutzermodus verbracht hat und wie lange auf den Kernel gewartet wurde?
Mit anderen Worten, genau die „user“- und „sys“-Werte, die Sie erhalten, wenn Sie time
verwenden , aber während Prozesslaufzeit?
HINWEIS: Eine Möglichkeit besteht darin, WBEM zu verwenden und Linux_UnixProcess aufzuzählen, aber ich muss other verwenden Werkzeug als dieses; Mein Ziel ist es zu überprüfen, was mir der WBEM-Anbieter sagt, d. h. ich muss ein anderes Tool verwenden.
Akzeptierte Antwort:
Unter Linux sind die Informationen in den Feldern 14 bis 17 von /proc/$pid/stat
verfügbar (siehe proc(5) für Details):
Felder sind:
- 14:Benutzerzeit (in Taktzahlen)
- 15:Systemzeit
- 16:Benutzerzeit der gewarteten Kinder
- 17:sys-Zeit der gewarteten Kinder
(alle Threads eines gegebenen Prozesses haben dort die gleichen Werte)
Sie werden nicht direkt von ps
gemeldet .
ps
meldet 14 + 15 mit ps -o time
und 14 + 15 + 16 + 17
mit ps --cumulative -o bsdtime
.
Beachten Sie, dass das zweite Feld in /proc/$pid/stat
kann Leerzeichen oder Zeilenumbruchzeichen enthalten, sodass Sie es nicht mit $1
von awk parsen können , $2
…
Sie können perl
verwenden wie:
$ perl -MPOSIX -l -0777 -ne '@f = /(.*)|S+/gs;
printf "utime: %.2fnstime: %.2fncutime: %.2fncstime: %.2fn",
map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[13..16]' "/proc/$pid/stat"
utime: 3.79
stime: 2.06
cutime: 56.49
cstime: 34.27
Ein Prozess kann seine eigenen Zeiten mit getrusage(RUSAGE_SELF)
abrufen und getrusage(RUSAGE_CHILDREN)
.
Es gibt auch ein times
Systemaufruf, der dieselben Informationen abruft. POSIX-Shells haben times
dafür eingebaut. Einige Shells liefern diese Informationen auch mit time
(ohne Argumente).
$ times
0m3.800s 0m2.060s
0m56.512s 0m34.276s
$ ps -o time -p "$$"
TIME
00:00:05
$ ps --cumulative -o bsdtime -p "$$"
TIME
1:36