Não se esqueça de que há uma diferença entre o builtin do bash time
(que deve ser chamado por padrão quando você o faz time command
) e /usr/bin/time
(que deve exigir que você o chame por seu caminho completo).
O embutido time
sempre imprime em stderr, mas /usr/bin/time
permitirá que você envie a saída de tempo para um arquivo específico, de forma que você não interfira com o fluxo stderr do comando executado. Além disso, /usr/bin/time
o formato de é configurável na linha de comando ou pela variável de ambiente TIME
, enquanto o time
formato embutido do bash é configurado apenas pela TIMEFORMAT
variável de ambiente.
$ time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
real 0m3.194s
user 0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
man bash
: "A variável TIMEFORMAT pode ser definida como uma string de formato que especifica como as informações de tempo devem ser exibidas"help time
porque apenas dei uma olhada e pensei que era um argumento de linha de comando. Vou atualizar a resposta.time
é um comando embutido na maioria dos shells que grava informações de tempo de execução no tty.Você também pode tentar algo como
start_time=`date +%s` <command-to-execute> end_time=`date +%s` echo execution time was `expr $end_time - $start_time` s.
Ou em
bash
:start_time=`date +%s` <command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
fonte
time
usa milissegundos. E se você quiser cronometrar um punhado de comandos sem ter que usar variáveis e cálculos, você pode usar parênteses:time ( command1 ; command2 ; command3 )
você pode até mesmo cronometrá-los individualmente com um tempo total, assim:time ( time command1 ; time command2 ; time command3 )
Claro, se você quiser uns vinte comandos, pode seria melhor usar a solução desta resposta. Mas então, você deve começar a pensar em colocar todos os seus comandos em um script ...root@hostname:~# time [command]
Ele também distingue entre o tempo real usado e o tempo do sistema usado.
fonte
time
escreve para o tty, não para o stderr. O que acho que piora as coisas.Para uma medição delta linha por linha, experimente gnonom .
fonte
Adicionando à resposta de @mob:
Anexar
%N
adate +%s
nos dá precisão de nanossegundos:start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
fonte
Se estou iniciando um processo de longa duração, como uma cópia ou hash e quero saber mais tarde quanto tempo demorou, basta fazer o seguinte:
O que resultará na seguinte saída:
Concedido, conforme implementado aqui, não é muito preciso e não calcula o tempo decorrido. Mas é muito simples e às vezes tudo que você precisa.
fonte
No zsh você pode usar
Em bash ou zsh, você pode usar
command time ...
Estes (por mecanismos diferentes) forçam um comando externo a ser usado.
fonte
Somente
ps -o etime= -p "<your_process_pid>"
fonte