Как я могу измерить время выполнения терминального процесса?


160

Я пытаюсь измерить время выполнения процесса, который я вызываю через командную строку (т. Е. Я хочу узнать, сколько времени требуется для завершения процесса). Есть ли какая-либо команда, которую я могу добавить к команде, вызывающей процесс, который достигнет этого?

Ответы:


198

Добавьте timeперед командой, которую вы хотите измерить. Например: time ls.

Вывод будет выглядеть так:

real    0m0.606s
user    0m0.000s
sys     0m0.002s

Пояснения к real, userи sysman time):

  • real: Истекшее реальное время (настенные часы), использованное процессом, в секундах.
  • user: Общее количество ЦП-секунд, которые процесс использовал напрямую (в пользовательском режиме), в секундах.
  • sys: Общее количество процессорных секунд, используемых системой от имени процесса (в режиме ядра), в секундах.

1
@ninjalj, вы можете предоставить более подробную информацию о том , что real, userи sysраз в том , что эта команда возвращает?
Кристофер Кайл Хортон

2
@JacobVlijm Этот ответ не такой сложный. :) Вы можете отредактировать свой комментарий и сделать так.
Муру

1
Обратите внимание, что вам может понадобиться, sudo apt-get install timeесли вы используете оболочку, timeкоторая не является встроенной.
пул

1
Обратите внимание, что это вывод timeвстроенной команды Bash , но man timeон будет о исполняемом файле (например /usr/bin/time, из timeпакета), и его вывод будет выглядеть иначе. Также в Bash вы можете запустить help timeдля помощи со встроенным.
wjandrea

Обратите внимание, что завершение процесса не означает, что вся работа завершена. Копия может занять дополнительные минуты после того, как «время» вернется для очистки системных буферов (для этого также используется нераспределенное системное время).
ubfan1

43

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

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

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

демо гномон


2
Это довольно гладко.
Натан Артур

1
(опечатка в ссылке, к счастью, URL в порядке). Вы можете установить его, sudo npm i gnomon -gесли у вас есть npm. Не уверен, насколько хорошо он работает против строк «прогресса», используя '\ r' (оставаясь на одной и той же строке): в этом случае я бы хотел, чтобы он считал все как одну длинную строку, а не как отдельные
Томаш Гандор

таким образом, мы передаем это гномону! это оно ?
Ciasto piekarz


8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

Выполнение этой команды в терминале даст вам общее время для копирования файла


Это даст вам время начала и время окончания, а не продолжительность.
wjandrea

Это хороший ответ при некоторых обстоятельствах. Например, следующая findкоманда - без 2>/dev/nullперенаправления - выдает обильные Permission denied сообщения. Однако добавление 2>/dev/nullк этой команде нарушает timeчасть этой команды. Следующее обеспечивает хороший компромисс: START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"предоставление (например) /usr/lib/libname-server-2.a find command took 3 sec в качестве единственного вывода.
Виктория Стюарт

Приложение к моему комментарию: конечно, вы можете просто запустить time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(то есть, как sudo) - избегая этих многочисленных Permission deniedпредупреждений.
Виктория Стюарт

4

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

Для этого мне нравится использовать SW .

ЮЗ

устанавливать

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

использование

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.