No Linux, a informação está disponível nos campos 14 a 17 de /proc/$pid/stat
(veja proc (5) para detalhes):
Os campos são:
- 14: tempo do usuário (em número de pulsos de clock)
- 15: hora do sistema
- 16: tempo de espera do usuário por crianças
- 17: hora de sys de esperar por crianças
(todos os threads de um determinado processo possuem os mesmos valores)
Eles não são relatados diretamente por ps
.
ps
relatórios 14 + 15 com ps -o time
e 14 + 15 + 16 + 17
com ps --cumulative -o bsdtime
.
Tenha em atenção que o segundo campo em /proc/$pid/stat
pode conter espaços ou caracteres de nova linha, pelo que não é possível analisá-lo com $1
, $2
... do awk
Você pode usar perl
como:
$ perl -MPOSIX -l -0777 -ne '@f = /\(.*\)|\S+/gs;
printf "utime: %.2f\nstime: %.2f\ncutime: %.2f\ncstime: %.2f\n",
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
Um processo pode recuperar seus próprios tempos com getrusage(RUSAGE_SELF)
e getrusage(RUSAGE_CHILDREN)
.
Há também uma chamada de sistema times
que recupera as mesmas informações. Os cartuchos POSIX têm um times
embutido para isso. Algumas shells também fornecem essa informação com time
(sem argumentos).
$ 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