【问题标题】:how to get time execution of a program in linux terminal separately如何分别在linux终端中获取程序的执行时间
【发布时间】:2015-03-06 11:13:15
【问题描述】:

我想在我的终端中获取程序的执行时间。我知道我应该使用这个命令:

time chmod +x ~/example

但输出是这样的:

real    0m0.088s
user    0m0.057s
sys     0m0.030s

但我想分别访问每一个。例如只是real。我怎样才能得到它?

【问题讨论】:

  • 顺便说一句,为chmod 命令计时并不是很重要,也不是很有用(例如,因为page cache....)通常,您应该多次进行基准测试 i> 至少持续半秒的执行。

标签: linux bash time terminal linux-mint


【解决方案1】:

您可以使用-f 格式化time 命令:

$ /usr/bin/time -f "\t%E Elapsed Real Time" touch a
    0:00.00 Elapsed Real Time

geek stuff 有关于这个主题的非常广泛的文档: 12 UNIX / Linux Time Command Output Format Option Examples

有趣的是,单独使用time 调用它对我不起作用,我必须使用完整路径。

【讨论】:

  • 是的,它需要 /usr/bin/time
  • 在 OSX 上我得到/usr/bin/time: illegal option -- f 它可能是time 的gnu 版本
  • 没有什么是正确标准化的,这很棒,不是吗。 >.
  • 哈哈,确实,我最近读到类似“有很多标准可供选择”之类的东西:D
  • @anubhava 它是 gnu,其他人都清楚,内置的 time 和 usr/bin/time 是两个完全独立的程序,彼此没有关系,除了做几乎相同的事情。同样在大多数情况下,usr/bin/time 超过了 time 内置
【解决方案2】:

在 bash 中,您可以使用 TIMEFORMAT 变量影响 time 的输出,方法是设置

TIMEFORMAT=%R    # real
TIMEFORMAT=%U    # user
TIMEFORMAT=%S    # sys

在调用它之前。但是,您的问题可能还不止于此——使用 bash 捕获 time 的输出并非易事,因为它不是子进程,而是内置的 shell。 bash FAQ 中有一个关于该主题的条目。从那里开始,我认为你最终想要

TIMEFORMAT=%R myvar=$( { time chmod +x ~/example > /dev/null 2>&1; } 2>&1 )

那么$myvar就是命令的真正运行时间。

【讨论】:

    【解决方案3】:

    你可以这样做:

    (time chmod +x ~/example) |& awk '$1=="real"{print $2}'
    0m0.003s
    

    【讨论】:

    • 或者只是(time chmod +x ~/example) |& grep '^real' - 与bash一起使用
    • grep 也可以使用,awk 用于获取输出中的实际值,即0m0.003s 而不是real 0m0.003s
    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2019-08-16
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多