Время выполнения команды оболочки - PullRequest
74 голосов
/ 01 ноября 2009

Можно ли напечатать время выполнения команды оболочки при следующей комбинации?

root@hostname:~# "command to execute" && echo "execution time"

Ответы [ 8 ]

101 голосов
/ 01 ноября 2009

time - встроенная команда в большинстве оболочек, которая записывает информацию о времени выполнения в tty.

Вы также можете попробовать что-то вроде

start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.

Или в bash:

start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
64 голосов
/ 01 ноября 2009

Не забывайте, что есть разница между встроенным в bash time (который должен вызываться по умолчанию, когда вы делаете time command) и /usr/bin/time (который должен требовать, чтобы вы вызывали его по полному пути).

Встроенный time всегда печатает в stderr, но /usr/bin/time позволит вам отправлять вывод времени в определенный файл, поэтому вы не будете вмешиваться в поток stderr выполненной команды. Кроме того, формат /usr/bin/time настраивается в командной строке или с помощью переменной окружения TIME, тогда как встроенный формат bash time - это only , настроенный TIMEFORMAT переменная окружения.

$ time factor 1234567889234567891 # builtin
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 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
23 голосов
/ 01 ноября 2009
root@hostname:~# time [command]

Он также различает реальное и системное время.

10 голосов
/ 27 июля 2016

Для построчного измерения дельты попробуйте gnonom .

Это утилита командной строки, немного похожая на команду moreutils, для добавления метки времени к стандартному выводу другой команды. Полезно для длительных процессов, где вы хотите получить историческую запись о том, что занимает так много времени.

Передача чего-либо в gnomon приведет к добавлению временной метки к каждой строке, указывающей, как долго эта строка была последней строкой в ​​буфере, то есть сколько времени потребовалось для появления следующей строки. По умолчанию, gnomon будет отображать секунды, прошедшие между каждой строкой, но это настраивается.

gnomon demo

7 голосов
/ 29 января 2015

Добавление к ответу моба:

Добавление %N к date +%s дает нам наносекундную точность:

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
4 голосов
/ 03 июня 2015

Если я запускаю длительный процесс, например, копию или хэш, и я хочу узнать позже, сколько времени прошло, я просто делаю это:

$ date; sha1sum reallybigfile.txt; date

Что приведет к следующему выводу:

Tue Jun  2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0  reallybigfile.txt
Tue Jun  2 21:33:54 PDT 2015

Конечно, как реализовано здесь, это не очень точно и не вычисляет истекшее время. Но это очень просто, а иногда и все, что вам нужно.

3 голосов
/ 22 ноября 2014

В Zsh вы можете использовать

=time ...

В bash или zsh вы можете использовать

command time ...

Они (с помощью различных механизмов) заставляют использовать внешнюю команду.

0 голосов
/ 02 августа 2018

Просто ps -o etime= -p "<your_process_pid>"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...