time(1) подсчитывает время выполнения простой команды или использования

ОБЗОР

time [параметры] команда [аргументы...]

ОПИСАНИЕ

Программа time запускает указанную команду с заданными аргументами. Когда команда завершается, time выдаёт в стандартный вывод сообщений об ошибках статистическое сообщение об использованном времени при этом запуске. Эта статистика содержит (1) прошедшее реальное время между вызовом и завершением, (2) процессорное время работы в пользовательском пространстве (сумма значений tms_utime и tms_cutime из структуры struct tms, возвращаемой times(2)) и (3) процессорное время работы в системном пространстве (сумма значений tms_stime и tms_cstime из структуры struct tms, возвращаемой times(2)).

Замечание: некоторые командные интерпретаторы (например, bash(1)) имеют встроенную команду time, выводит похожую информацию и, возможно, другие ресурсы. Для работы с настоящей командой вам может потребоваться вызывать её по абсолютному имени (например, /usr/bin/time).

ПАРАМЕТРЫ

-p
При локали POSIX использовать точный традиционный формат
"real %f\nuser %f\nsys %f\n"
(с цифрами в секундах), где число целых разрядов в выводе для %f не задаётся, но является достаточным для точного вывода времени и, по крайней мере, разрядов не меньше одного.

КОД РЕЗУЛЬТАТА

Если команда отработала, то возвращается её код результата (exit status). В противном случае он равен 127, если команда не найдена, 126 — если она найдена, но не может быть вызвана, и некоторому другому отличному от нуля значению (1-125), если произошли какие-либо другие ошибки.

ОКРУЖЕНИЕ

При работе используются переменные LANG, LC_ALL, LC_CTYPE, LC_MESSAGES, LC_NUMERIC, NLSPATH и PATH. Последняя используется для поиска команды. Остальные --- для форматирования текстового результата.

ВЕРСИЯ GNU

Ниже дано описание программы GNU time версии 1.7. Несмотря на тоже имя утилиты, GNU выводит большее количество полезной информации, не только об использованном времени, но также и о других ресурсах, таких как память, ввод/вывод и вызовы IPC (если возможно). Вывод создаётся с помощью строки форматирования, которую можно задать с помощью параметра -f или переменной окружения TIME.

По умолчанию строка форматирования имеет вид:

%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
%Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps

Если задан параметр -p, то используется переносимый формат вывода:

real %e
user %U
sys %S

Строка форматирования

Формат интерпретируется аналогично printf. Обычные символы просто копируются, табуляции, символы новой строки и обратная косая черта изолируются с помощью \t, \n и \\, знак процента указывается как %% и, наконец, % указывает на преобразование следующего за ним символа. Программа time всегда будет добавлять в начало вывода новую строку. Преобразования описаны ниже. Поддерживаются все параметры, имеющиеся в tcsh(1).

Время

%E
Фактическое затраченное время (в формате [часы:]минуты:секунды).
%e
(Нет в tcsh(1).) Фактическое затраченное время (в секундах).
%S
Общее количество секунд времени ЦП, которое процесс провел в режиме ядра.
%U
Общее количество секунд времени ЦП, которое процесс провел в пользовательском режиме.
%P
Процент ЦП, который процесс получил для работы, вычисляется как (%U + %S) / %E.

Память

%M
Максимальный резидентный размер процесса в течении его выполнения в килобайтах.
%t
(Нет в tcsh(1).) Средний резидентный размер процесса в килобайтах.
%K
Средний общий размер использованной процессом памяти (данные+стек+текст) в килобайтах.
%D
Средний размер неразделяемой области данных процесса в килобайтах.
%p
(Нет в tcsh(1).) Средний размер неразделяемого пространства стека процесса в килобайтах.
%X
Средний размер разделяемого пространства кода процесса в килобайтах.
%Z
(Нет в tcsh(1).) Размер системной страницы в байтах. Это значение является постоянным, но может отличаться у разных систем.
%F
Число больших страничных промахов, произошедших при работе процесса. Данные промахи учитываются, если нужную страницу пришлось читать с диска.
%R
Число малых или восстановимых страничных промахов. Данные промахи учитываются для страниц, которые уже считаются некорректными, но не были захвачены другими виртуальными страницами. Таким образом, данные в странице всё ещё достоверны, но требуется обновление системных таблиц.
%W
Количество раз, которое процесс был выгружен в область подкачки из основной памяти.
%c
Количество раз, когда для процесса совершалось принудительное переключение контекста (потому что истёк выделенный ему отрезок времени).
%w
Количество ожиданий: сколько раз программа добровольно выполняла переключение контекста, например, на время ожидания завершения операций ввода/вывода.

Ввод/вывод

%I
Количество чтений файловой системы процессом.
%O
Количество записи в файловую систему процессом.
%r
Количество сообщений, принятых процессом из сокета.
%s
Количество сообщений, посланных процессом в сокет.
%k
Количество сигналов, доставленных процессу.
%C
(Нет в tcsh(1).) Имя и аргументы командной строки запущенной команды.
%x
(Нет в tcsh(1).) Код результата выполненной команды.

Параметры GNU

-f формат, --format=формат
Задать формат вывода, возможно перекрывая формат, указанный в переменной окружения TIME.
-p, --portability
Использовать переносимый формат вывода.
-o файл, --output=файл
Не посылать вывод в stderr, а перезаписать им указанный файл.
-a, --append
(Используется совместно с -o.) Не перезаписывать файл, а дополнять его.
-v, --verbose
Выводить все возможные подробности о работе программы.

Стандартные параметры GNU

--help
Выдать справку по работе на стандартный вывод и успешно завершить работу.
-V, --version
Выдать информацию о версии на стандартный вывод и успешно завершить работу.
--
Служит для обозначения конца списка параметров.

ДЕФЕКТЫ

Не все ресурсы могут быть измерены во всех версиях UNIX, поэтому некоторые значения могут быть показаны как нулевые. Отбор измеряемых ресурсов, в основном, проводился по данным, предоставляемым 4.2 или 4.3BSD.

Программа GNU time версии 1.7 пока не локализована. Таким образом, она не удовлетворяет требованиям POSIX.

Имя для переменной окружения TIME выбрано неосмотрительно. Есть вполне распространённая практика для систем, например autoconf(1) или make(1), использовать переменные окружения с именами утилит для замены используемой утилиты. Использование MORE или TIME в качестве параметров программ (вместо путей к программам) рано или поздно приведёт к проблемам.

Кажется неудачным, что -o выполняется перезапись вместо добавления. (То есть параметр -a должен бы использоваться по умолчанию.)

Советы и сообщения об ошибках по GNU time направляйте на
[email protected]
Указывайте версию time, которую можно узнать, запустив
time --version
а также операционную систему и компилятор C, который вы использовали.