Descubra quanto tempo um processo passou consigo mesmo

1

O comando time pode ser usado para obter uma estimativa do tempo de CPU para um determinado trabalho. No entanto, parece que sua saída inclui o tempo gasto em processos filhos. Existe uma maneira de obter o tempo gasto apenas no processo pai?

    
por user877329 23.06.2017 / 19:15

1 resposta

1

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.

    
por 23.06.2017 / 20:29