A maneira tradicional de registrar e acompanhar o tempo de CPU do usuário é contabilidade do processo . No Linux, instale os utilitários de contabilidade GNU , normalmente fornecidos por um pacote chamado acct
. Não tenho certeza de quão preciso será manter o controle do tempo gasto em processos de vida muito curta, mas pelo menos listará todos os processos já executados.
Execute lastcomm
para obter uma lista de todos os comandos executados por qualquer usuário e o tempo gasto em cada (arredondado para ~ 10ms para processos de curta duração, espere ver muito 0.00
). Execute sa
para exibir várias somas e estatísticas. Em particular, sa -m
exibe totais por usuário. As estatísticas acumuladas por sa
são executadas a partir da última rotação dos registros contábeis (geralmente localizada em /var/log/account/
).
Note que você não vai pegar todos os processos por amostragem em intervalos, não de longe. Você perderá quase todos os processos de curta duração e os últimos segundos de processos longos. A contabilidade de processos lista todos os processos anteriores.
Em /proc/$pid/stat
, o tempo do usuário é o tempo gasto fazendo computação, em oposição ao tempo gasto no sistema fazendo I / O. Qual deles depende depende do que você quer fazer com a informação.
A contagem de todos os PIDs está correta. Eu não sei o que o pai PID tem a ver com isso.
No lado do sistema, sua descrição de /proc/uptime
parece errada. Wikipedia está certo quando escrevo. O primeiro campo é o tempo real decorrido desde o início do sistema, menos o tempo gasto suspenso ou em hibernação. O segundo campo é o tempo acumulado gasto na tarefa ociosa em todas as CPUs. Não tenho certeza do que isso realmente significa; certamente não é o tempo ocioso total na minha máquina. No kernel, o valor é somado em uptime_proc_show
de variáveis atualizadas em account_idle_time
.