Time
系统内建time命令
当测试一个程序或比较不同算法时,执行时间是非常重要的,一个好的算法应该是用时最短的。所有类UNIX系统都包含time命令,使用这个命令可以统计时间消耗。例如:
bash
time ls
errcheck.h linkList.c linkList.h main main.c
real 0m0.004s
user 0m0.000s
sys 0m0.003s
输出的信息分别显示了该命令所花费的real时间、user时间和sys时间。
- real时间 是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
- user时间 是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
- sys时间 是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。
当运行time时候是调用的系统内建命令,shell内建也有一个time命令。
shell内建time命令
因为系统内建的功能有限,所以需要时间其他功能需要使用time命令可执行二进制文件/usr/bin/time。
默认调用
bash
/usr/bin/time ls
errcheck.h linkList.c linkList.h main.c
0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 2432maxresident)k
0inputs+0outputs (0major+106minor)pagefaults 0swaps
可选参数
- -o 将执行时间写入到文件中
- -a 配合-o追加写入到文件
- -f 格式化输出
bash
/usr/bin/time -f "time: %U" ls
格式化参数
参数 | 描述 |
---|---|
%E | real时间,显示格式为[小时:]分钟:秒 |
%U | user时间。 |
%S | sys时间。 |
%C | 进行计时的命令名称和命令行参数。 |
%D | 进程非共享数据区域,以KB为单位。 |
%x | 命令退出状态。 |
%k | 进程接收到的信号数量。 |
%W | 进程被交换出主存的次数。 |
%Z | 系统的页面大小,这是一个系统常量,不用系统中常量值也不同。 |
%P | 进程所获取的CPU时间百分百,这个值等于user+system时间除以总共的运行时间。 |
%K | 进程的平均总内存使用量(data+stack+text),单位是KB。 |
%w | 进程主动进行上下文切换的次数,例如等待I/O操作完成。 |
%c | 进程被迫进行上下文切换的次数(由于时间片到期)。 |