Як я можу виміряти час виконання термінального процесу?


160

Я намагаюся виміряти час виконання процесу, який я викликаю за допомогою командного рядка (тобто, я хочу з’ясувати, скільки часу потрібно, щоб процес закінчився). Чи є якась команда, яку я можу додати до команди, що викликає процес, який цього досяг?

Відповіді:


197

Додати 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не вбудований.
poolie

1
Зауважте, що це вихід з timeвбудованого Bash , але man timeвін буде приблизно виконуваним файлом (наприклад /usr/bin/time, з timeпакета), і його вихід буде виглядати інакше. Також у Bash можна побігти help timeза допомогою вбудованого.
wjandrea

Зауважте, що закінчення процесу не означає, що робота закінчена. Копія може зайняти додаткові хвилини після повернення "часу" для системних буферів для промивання (для цього також з нерозподіленим sys часом).
ubfan1

43

Для лінійного вимірювання дельти спробуйте гномон .

Це утиліта командного рядка, схожа на ts moreutils, для подання інформації про часові позначки до стандартного виводу іншої команди. Корисно для тривалих процесів, де ви хочете отримати історичний запис того, що триває так довго.

Передача нічого до gnomon додасть часову позначку до кожного рядка, вказуючи, наскільки довгий цей рядок був останнім рядком у буфері - тобто, скільки часу знадобилося, щоб з'явився наступний рядок. За замовчуванням gnomon відображатиме секунди, що минули між кожним рядком, але це можна настроювати.

gnomon demo


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 .

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.