Оглядываясь назад, время выполнения команды

22

Я только что выполнил длительный процесс из командной строки bash. Оглядываясь назад, я хотел бы поработать timeнад этим или записать время, когда я его начал.

Есть ли способ получить эту информацию ретроспективно? .bash_history, Кажется, не включают в себя временные метки.

В моем конкретном случае это Mac OS X, но меня интересуют общие решения Unix / Linux.

Чтобы уточнить, процесс теперь завершен, и я бы предпочел не запускать его снова, если в этом нет крайней необходимости!

Грэм Борланд
источник
Я также всегда забывал об этом, и я настроил мое приглашение отображать время.
математическое

Ответы:

23

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

Так что попробуйте запустить

HISTTIMEFORMAT='%x %X ' history

Если вы также положили

HISTTIMEFORMAT=<some format>

в вашем ~/.bashrc, он также будет записан ~/.bash_historyпри выходе, так что вы также можете проверить, что происходило в предыдущих сеансах оболочки.

Mikel
источник
Крутой Майк, даже не думал, что это возможно.
Тим
9

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

У меня нет решения для случая, когда нужно выяснить без подготовки. Однако, если вы собираетесь сделать это снова, вы можете сделать как я: вывести текущее время вместе с приглашением оболочки. Таким образом, если у вас все еще открыт терминал, вы можете увидеть время, когда вы запустили программу, и время, когда будет напечатано следующее приглашение. Небольшая математика даст вам время выполнения.

Чтобы сделать это bash, вставьте это в ваш .bashrc:

export PS1="\A \u@\h \W \$ "

В zsh, это в вашем .zshrc:

export PS1="%D{%H:%M} %n@%m %1~ %# "

Выше приведено приглашение вашей оболочки в формате <time> <username>@<hostname> <current dir> <$ or % or #>. О различных оболочках и сумасшедших необычных подсказках читайте в справочной странице вашей оболочки.

Примечание: это, вероятно, не поможет, если вам нужна высокая точность, или если программа выдает так много информации, что вы не видите предыдущее приглашение.

phunehehe
источник
2
По этой причине я включаю метку времени в приглашение командной строки, но учтите, что время, отображаемое в приглашении, - это время, когда приглашение было напечатано, которое может сильно отличаться от времени, которое вы фактически закончили вводить, и нажмите клавишу ВВОД, чтобы запустить команду. Другими словами, не забудьте учесть «быстрый простой».
jw013
5

Если процесс все еще выполняется, вы можете использовать, psчтобы узнать время его запуска и сколько процессорного времени он использовал.

Например, для всех процессов:

ps -eo cputime,start,pid,command,args

Для конкретного pid (12345):

ps -p 12345 -o cputime,start,pid,command,args
jsbillings
источник
Спасибо, но процесс уже завершен. Я буду иметь это в виду, если я буду запускать это снова.
Грэм Борланд
Я использую GNU psв Linux, psв MacOSX может быть BSD, и я не уверен в аргументах.
jsbillings
Кроме того, имейте в виду, что процессорное время не является «реальным временем»
Хуан
4

lastcomm (если учет процессов BSD включен) даст вам продолжительность выполнения (в некотором ограниченном смысле, который может быть или не быть адекватным).

Мартин Киган
источник