在shell中获取程序执行时间

新手上路,请多包涵

我想在几个不同的条件下在 linux shell 中执行一些东西,并且能够输出每次执行的执行时间。

我知道我可以编写一个 perl 或 python 脚本来做到这一点,但是有没有办法在 shell 中做到这一点? (恰好是bash)

原文由 ʞɔıu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 684
2 个回答

使用内置的 time 关键字:

$帮助时间

时间:时间 [-p] 管道
    执行 PIPELINE 并打印实时的摘要,用户 CPU 时间,
    以及在它终止时执行 PIPELINE 所花费的系统 CPU 时间。
    返回状态为PIPELINE的返回状态。 `-p' 选项
    以稍微不同的格式打印时序摘要。这使用
    TIMEFORMAT 变量的值作为输出格式。

例子:

 $ time sleep 2

实际0m2.009s
用户 0m0.000s
系统 0m0.004s

原文由 Robert Gamble 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以获得比内置 bash 更详细的信息 time (即 time(1) ,Robert Gamble 提到过)。通常这是 /usr/bin/time

编者注:为确保您调用的是 外部实用程序 time 而不是 shell 的 time _关键字_,请将其调用为 /usr/bin/timetimePOSIX 强制实用程序,但它需要支持的唯一选项是 -p 。特定平台实现特定的非标准扩展: -vGNUtime 实用程序一起使用,如下所示(问题标记为 linux ); BSD/macOS 实现使用 -l 来产生类似的输出 - 参见 man 1 time

详细输出示例:

 $ /usr/bin/time -v sleep 1
       Command being timed: "sleep 1"
       User time (seconds): 0.00
       System time (seconds): 0.00
       Percent of CPU this job got: 1%
       Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.05
       Average shared text size (kbytes): 0
       Average unshared data size (kbytes): 0
       Average stack size (kbytes): 0
       Average total size (kbytes): 0
       Maximum resident set size (kbytes): 0
       Average resident set size (kbytes): 0
       Major (requiring I/O) page faults: 0
       Minor (reclaiming a frame) page faults: 210
       Voluntary context switches: 2
       Involuntary context switches: 1
       Swaps: 0
       File system inputs: 0
       File system outputs: 0
       Socket messages sent: 0
       Socket messages received: 0
       Signals delivered: 0
       Page size (bytes): 4096
       Exit status: 0

原文由 grepsedawk 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题