Existe uma maneira de imprimir o tempo de execução (tempo de parede) em zsh quando exceder determinado limite configurável?

5

O comentário de @mpy estava correto. Então estou reformulando minha pergunta. Eu realmente gosto do recurso REPORTTIME em zsh, mas ele só relata tempo quando o tempo do sistema + usuário é maior que $ REPORTTIME de acordo com zsh doc . Existe uma maneira de fazer o tempo do relatório zsh quando o tempo da parede é maior que algum número, mas não o tempo do relatório quando o tempo da parede está abaixo desse número?

Pergunta original: Eu realmente gosto do recurso REPORTTIME em zsh, mas de acordo com o zsh doc , ele só sai quando o resultado do comando é diferente de zero. Mas há alguns casos em que algum comando demora um pouco e falha, e eu quero saber quanto tempo demorou. Alguém sabe uma maneira de imprimir o tempo para o comando, mesmo que o resultado falhou?

    
por ktsujister 10.10.2013 / 04:09

1 resposta

9

A funcionalidade de REPORTTIME parece ser codificada para comparar usertime+systime . O código-fonte zsh relevante para a funcionalidade REPORTTIME :

#ifdef HAVE_GETRUSAGE
    reporttime -= j->procs->ti.ru_utime.tv_sec + j->procs->ti.ru_stime.tv_sec;
    if (j->procs->ti.ru_utime.tv_usec +
    j->procs->ti.ru_stime.tv_usec >= 1000000)
    reporttime--;
    return reporttime <= 0;
#else
    {
    clktck = get_clktck();
    return ((j->procs->ti.ut + j->procs->ti.st) / clktck >= reporttime);
    }
#endif

Como uma solução alternativa, você pode modificar seu zshrc para obter a funcionalidade de simalar para ter REPORTTIME usando o tempo total de execução.

REPORTTIME_TOTAL=5

# Displays the execution time of the last command if set threshold was exceeded
cmd_execution_time() {
  local stop=$(('date "+%s + %N / 1_000_000_000.0"'))
  let local "elapsed = ${stop} - ${cmd_start_time}"
  (( $elapsed > $REPORTTIME_TOTAL )) && print -P "%F{yellow}${elapsed}s%f"
}

# Get the start time of the command
preexec() {
  cmd_start_time=$(('date "+%s + %N / 1.0e9"'))
}

# Output total execution
precmd() {
  if (($+cmd_start_time)); then
    cmd_execution_time
  fi
}

Infelizmente, este comando fornece apenas o tempo total de execução. Ele não divide o tempo de execução no tempo do usuário e do sistema.

    
por 02.12.2014 / 04:56

Tags