一、时间介绍

unix环境下一共有两种时间值:

  1. 日历时间(Calendar time):该值是自1970年1月1日00:00:00以来所经过的秒数累计值,也叫国际标准时间(UTC,早期的手册称UTC为格林尼治标准时间),这些时间值可用于记录文件最近一次的修时间等,是最常用到的时间。
  2. 进程时间(Process time):也被称作CPU时间,用来度量进程使用的中央处理器资源,它由时钟滴答(clock ticks)表示,每秒50、60或者100个时钟滴答。

通常当我们度量一个进程的执行时间时会包含三种时间属性:时钟时间、用户CPU时间和系统CPU时间。

时钟时间(wall clock time)指进程运行所花费的时间,也就是命令开始执行到结束的时间。它的值与系统中其他的进程数量有关,包括了其他进程所占用的时间和进程被阻塞时所花费的时间。

用户CPU时间是指进程执行用户指令所花费的时间,系统CPU时间则指进程在进行系统调用时占用的时间(例如当我们执行openwrite等函数时)。用户CPU时间和系统CPU时间的和被称为CPU时间。

二、度量时间

linux系统中可以通过time命令度量一个命令的执行时间,把待执行的命令加在time命令后面就可以了。

> cd /usr/include
> time grep _POSIX_SOURCE */*.h > /dev/null

real    0m0.012s
user    0m0.008s
sys    0m0.000s

默认情况下使用的time命令是shell自带的,这个命令的功能有限,更多的时候可以选择使用/usr/bin/time

它的常用选项:

  • -f:自定义输出格式,后面接%U %E %S等等。
  • -o:重定向输出到文件。
  • -p:固定输出为以下格式:

    real %e
    user %U
    sys %S
> /usr/bin/time grep _POSIX_SOURCE */*.h > /dev/null # 默认输出
Command exited with non-zero status 1
0.00user 0.00system 0:00.00elapsed 57%CPU (0avgtext+0avgdata 2448maxresident)k
0inputs+0outputs (0major+114minor)pagefaults 0swaps
> /usr/bin/time -p grep _POSIX_SOURCE */*.h > /dev/null # -p
Command exited with non-zero status 1
real 0.00
user 0.00
sys 0.00
> /usr/bin/time -f "%U %E %S" grep _POSIX_SOURCE */*.h > /dev/null # 自定义格式
Command exited with non-zero status 1
0.00 0:00.00 0.00
最后修改:2018 年 05 月 18 日
如果觉得我的文章对你有用,请随意赞赏