GNU/Linux >> Znalost Linux >  >> Linux

Získat čas uživatele a jádra běžícího procesu?

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

Linux
  1. Linux – rozdíl mezi uživatelským prostorem a prostorem jádra?

  2. Linux – jak získat čas nástěnných hodin běžícího procesu?

  3. Spustit skript pokaždé, když je nainstalováno nové jádro?

  1. Stavy procesu Linuxu

  2. zásobník jádra a zásobník uživatelského prostoru

  3. Linuxový skript pro kontrolu, zda proces běží, a podle výsledku jednat

  1. Ztráta času execv() a fork()

  2. Kopírovat a chmod/chown zároveň

  3. Jaký je rozdíl mezi Nepreemptivním, Preemptivním a Selektivním Preemptivním jádrem?