如何测量终端进程的执行时间?


160

我正在尝试测量通过命令行调用的流程的执行时间(即,我想找出流程完成需要多长时间)。我可以在命令中添加任何命令来实现此目的的过程吗?

Answers:


197

time在要测量的命令之前添加。例如:time ls

输出将如下所示:

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

说明上realusersys(来自man time):

  • real:进程使用的实际经过时间(墙上时钟),以秒为单位。
  • user:进程(在用户模式下)直接使用的CPU秒总数,以秒为单位。
  • sys:系统代表进程使用的CPU秒总数(在内核模式下),以秒为单位。

1
@ninjalj,你可以提供更多的信息是什么realuser以及sys时间,这个命令返回?
Christopher Kyle Horton

2
@JacobVlijm这个答案不是那么详尽。:)您可以在评论中进行编辑。
muru 2015年

1
请注意,sudo apt-get install time如果您使用的time不是内置shell,则可能需要。
poolie的poolie

1
请注意,这是bash的输出time内置,但man time将大约一个可执行文件(例如/usr/bin/time,从time包中),其输出会有所不同。同样在Bash中,您可以运行help time内置程序以寻求帮助。
wjandrea

请注意,过程结束并不意味着所有工作都已完成。在“时间”返回后,可能需要花费额外的几分钟来刷新系统缓冲(因此也会分配未分配的系统时间)。
ubfan1

43

对于逐行增量测量,请尝试gnomon

这是一个命令行实用程序,有点像moreutils的ts,用于将时间戳信息附加到另一个命令的标准输出中。对于长时间运行的过程很有用,在该过程中您需要花费很长时间的历史记录。

用管道输送要忽略的内容将在每行前面添加一个时间戳,指示该行是缓冲区中最后一行的时间-即下一行显示需要多长时间。默认情况下,gnomon将显示每行之间经过的秒数,但这是可配置的。

gnomon演示


2
这很漂亮。
内森·亚瑟

1
(链接中有输入错误,幸运的是网址还可以)。sudo npm i gnomon -g如果有的话,您可以安装它npm。不确定使用'\ r'对“ progress”行的处理效果如何(保持在同一行):在这种情况下,我希望将其全部计为一个长行,而不是单独的行。
Tomasz Gandor

因此,我们将其传送到gnomon!而已 ?
贾斯托·皮耶卡兹


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(即as sudo)-避免那些过多的Permission denied警告。
Victoria Stuart

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.