Как найти время выполнения команды или процесса в Linux

Вероятно, вы знаете время начала команды/процесса и как долго процесс выполняется в Unix-подобных системах.

Но когда вы его закончили и/или какое общее время, затраченное на выполнение команды/процесса?

В Unix-подобных системах есть утилита с именем «GNU time», специально предназначенная для этой цели.

Используя утилиту Time, мы можем легко измерить общее время выполнения команды или программы в операционных системах Linux.

Хорошо, что команда «Time» поставляется в большинстве дистрибутивов Linux, поэтому вам не нужно беспокоиться об установке.

Найти время выполнения команды или процесса в Linux

Чтобы измерить время выполнения команды/программы, просто запустите.

$ /usr/bin/time -p ls

или

$ time ls

Пример вывода

dir1 dir2 file1 file2 mcelogreal 0m0.007suser 0m0.001ssys 0m0.004s
$ time ls -a. .bash_logout dir1 file2 mcelog .sudo_as_admin_successful.. .bashrc dir2 .gnupg .profile .wget-hsts.bash_history .cache file1 .local .stackreal 0m0.008suser 0m0.001ssys 0m0.005s

Вышеуказанные команды отображают общее время выполнения команды «ls».

Замените «ls» любой командой/процессом по вашему выбору, чтобы найти общее время выполнения.

Здесь:

  • real — возвращает общее время, затраченное командой/программой,
  • user — указывает время, затраченное программой в пользовательском режиме,
  • sys — указывает время, затраченное программой в режиме ядра.
time и /usr/bin/time

Как вы могли заметить, в приведенных выше примерах мы использовали две команды «time» и «/usr/bin/time».

Итак, вы можете задаться вопросом, в чем разница между ними.

Сначала давайте посмотрим, что на самом деле «timeя» использует команду «type».

Для тех, кто не знает, команда Type используется для получения информации о команде Linux.

$ type -a timetime is a shell keywordtime is /usr/bin/time

Как видите time  — две штуки

  • Ключевое слово, встроенное в оболочку BASH
  • Исполняемый файл — /usr/bin/time

Поскольку ключевые слова оболочки имеют приоритет над исполняемыми файлами, когда вы просто запускаете runmimommand без полного пути, вы запускаете встроенную команду оболочки.

Но, когда вы запускаете /usr/bin/time, вы запускаете реальную программу времени GNU time.

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

Встроенное ключевое слово оболочки «time» доступно в большинстве оболочек, таких как BASH, ZSH, CSH, KSH, TCSH и т. д.

Ключевое слово оболочки «time» имеет меньше опций, чем исполняемые файлы.

Единственный вариант, который вы можете использовать в ключе «time», — это -p.

Теперь вы знаете, как найти общее время выполнения данной команды/процесса, используя команду «time».

Хотите узнать немного больше об утилите «GNU time»? Читайте дальше!

Краткое введение в программу «GNU time»

Программа  GNU time запускает команду/программу с заданными аргументами и суммирует использование системных ресурсов в качестве стандартного вывода после завершения команды.

В отличие от ключевого слова time, программа GNU time не просто отображает время, используемое командой/процессом, но и другие ресурсы, такие как память, вызовы ввода-вывода и IPC.

Типичным синтаксисом команды Time является:

/usr/bin/time [options] command [arguments...]

options в приведенном выше синтаксисе ссылаются на набор флагов, которые могут использоваться  командой time для выполнения определенной функциональности.

Список доступных опций приведен ниже^

  • -f, -format — Используйте этот параметр, чтобы указать формат вывода по вашему желанию.
  • -p, -portability — Использовать переносимый формат вывода.
  • -o file, -output = FILE — Записывает вывод в FILE вместо отображения в качестве стандартного вывода.
  • -a, -append — Добавить файл в файл вместо перезаписывания.
  • -v, -verbose — Этот параметр отображает подробное описание вывода утилиты «время».
  • -Quiet — этот параметр запрещает утилиту времени «время» сообщать о статусе программы.
  • При использовании программы «GNU time» без каких-либо параметров вы увидите вывод, как показано ниже.
$ /usr/bin/time wc /etc/hosts9 28 273 /etc/hosts0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2024maxresident)k0inputs+0outputs (0major+73minor)pagefaults 0swaps

Если вы запустите ту же команду с встроенным ключевым словом «time», результат будет немного другим:

$ time wc /etc/hosts9 28 273 /etc/hostsreal 0m0.006suser 0m0.001ssys 0m0.004s

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

$ /usr/bin/time -o file.txt lsdir1 dir2 file1 file2 file.txt mcelog

Как вы можете видеть на выходе, утилита Time не отображает результат. Потому что мы записываем вывод в файл с именем file.txt. Давайте посмотрим на этот файл:

$ cat file.txt 0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k0inputs+0outputs (0major+106minor)pagefaults 0swaps

Когда вы используете флаг -o, если нет файла с именем «file.txt», он будет создавать и записывать вывод в него.

Если файл.txt уже присутствует, он перезапишет его содержимое.

Вы также можете добавить вывод в файл, а не переписывать его, используя флаг -a.

$ /usr/bin/time -a file.txt ls

Флаг -f позволяет пользователям управлять форматом вывода по своему усмотрению.

Скажем, например, следующая команда отображает вывод команды «ls» и показывает только пользователя, систему и общее время.

$ /usr/bin/time -f "\t%E real,\t%U user,\t%S sys" lsdir1 dir2 file1 file2 mcelog0:00.00 real, 0.00 user, 0.00 sys

Помните, что встроенная команда «time» не поддерживает все функции программы GNU time.

Для получения дополнительной информации о утилите времени GNU см. Справочные страницы.

$ man time

Отправка комментария

0 Комментарии