一、时间介绍
unix环境下一共有两种时间值:
- 日历时间(Calendar time):该值是自1970年1月1日00:00:00以来所经过的秒数累计值,也叫国际标准时间(UTC,早期的手册称UTC为格林尼治标准时间),这些时间值可用于记录文件最近一次的修时间等,是最常用到的时间。
- 进程时间(Process time):也被称作CPU时间,用来度量进程使用的中央处理器资源,它由时钟滴答(clock ticks)表示,每秒50、60或者100个时钟滴答。
通常当我们度量一个进程的执行时间时会包含三种时间属性:时钟时间、用户CPU时间和系统CPU时间。
时钟时间(wall clock time)指进程运行所花费的时间,也就是命令开始执行到结束的时间。它的值与系统中其他的进程数量有关,包括了其他进程所占用的时间和进程被阻塞时所花费的时间。
用户CPU时间是指进程执行用户指令所花费的时间,系统CPU时间则指进程在进行系统调用时占用的时间(例如当我们执行open
和write
等函数时)。用户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
此处评论已关闭