getrusage (2) oferece RUSAGE_SELF
ou RUSAGE_CHILDREN
; um shell de chamada só poderia usar RUSAGE_CHILDREN
, o que incluiria seu processo e também os filhos desse processo. Portanto, como Stéphane Chazelas aponta que o processo precisaria chamar getrusage(RUSAGE_SELF, &usage)
de dentro de si mesmo , que se seu processo não puder ser editado para fazer isso teria que acontecer por meio de% truque deLD_PRELOAD
.
Outra opção seria usar o DTrace ou, aqui, os recursos de criação de perfil de kernel do tipo SystemTap para relatar o uso na hora de saída do processo; os seguintes relatórios todos processam valores de saída:
probe kprocess.exit {
printf("%s[%d]: %s\n %s\n %s\n\n",
execname(), pid(), cmdline_str(),
task_time_string(),
proc_mem_string()
);
}
também podemos criar um perfil específico de PID ou executável com o código apropriado, aqui novamente com o SystemTap:
probe kprocess.exit {
if (pid() != target()) next;
printf("%s[%d]: %s\n", execname(), pid(), task_time_string());
}
Embora isso possa exigir testes extras para confirmar o que acontece quando um processo é morto por sinal, etc.