Existuje způsob, jak pomocí standardních nástrojů Linux/Unix určit, kolik proces strávil v uživatelském režimu a kolik čekání na jádro?
Jinými slovy, přesně ty hodnoty „user“ a „sys“, které získáte při použití time , ale během běh procesu?
POZNÁMKA: jeden způsob je použít WBEM a vyjmenovat Linux_UnixProcess, ale musím použít other nástroj než tento; mým cílem je ověřit, co mi říká poskytovatel WBEM, tj. musím použít jiný nástroj.
Přijatá odpověď:
V systému Linux jsou informace dostupné v polích 14 až 17 v /proc/$pid/stat (podrobnosti viz proc(5)):
Pole jsou:
- 14:uživatelský čas (v počtu hodin hodin)
- 15:sys time
- 16:uživatelská doba čekání na děti
- 17:sys čas čekání na děti
(všechna vlákna daného procesu tam mají stejné hodnoty)
Nejsou přímo hlášeny ps .
ps hlásí 14 + 15 s ps -o time a 14 + 15 + 16 + 17 s ps --cumulative -o bsdtime .
Pozor, druhé pole v /proc/$pid/stat může obsahovat mezery nebo znaky nového řádku, takže je nemůžete analyzovat pomocí $1 awk , $2 …
Můžete použít perl jako:
$ 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
Proces může získat své vlastní časy pomocí getrusage(RUSAGE_SELF) a getrusage(RUSAGE_CHILDREN) .
Je zde také times systémové volání, které načte stejné informace. Shelly POSIX mají times vestavěný pro to. Některé shelly také poskytují tyto informace s time (bez argumentů).
$ 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