在测试程序的时候,会经常使用time命令来确认程序运行的时间。
特别是在编译内核或者测试机器性能的时候,time必不可少的工具。
但是在FreeBSD上,time有点奇怪,因为man time上面说可以有几个参数,比如-l和-a参数,但是我输入这几个参数后,就会得“参数未找到”的错误。长期以来一直以为man没有跟上命令的更新,但经历了很多版本,结果都是一样,FreeBSD不会这么粗心的!
今天又仔细查看了一下man time,发现time命令本身就有两个:一个是外部命令,一个是内部命令。
对于FreeBSD来说,外部命令在/usr/bin/time,内部命令集成在csh里面。
这个问题可能很多人可能没注意到。
先看外部的time命令,这个命令还是比较简单的:
time [-al] [-h -p] [-o file] utility [argument ...]
-a : 追加模式,跟-o相配合使用,会在结果文件中追加而不是覆盖。
-l : 把rusage结构一起输出,也就相当于输出详细信息
-h : 人可读的模式,其实也就是那几个时间放一行
-p : 机读模式,每行一个项目,跟-h相互斥
2.214u: 用户态时间为2.214秒
0.000s: 内核时间为0秒
0:02.21: 这个是总的时间,为上面两项之和
100%: CPU占用率
3372+305K: text占用的内存为3372k,数据/堆栈占用305k
0+0IO: 0输入,0输出
0pf+0w: 0 page fault,0 swap
然后设置一下time变量,来看一下神奇的效果
root@TaoYuan:~ # set time = ( 1 "%U %S %P %r %s" )
root@TaoYuan:~ # php test.php
1250000025000001
2.211 0.000 100.0% 0 0
root@TaoYuan:~ # set time = ( 2 "%U %S %P %r %s" )
root@TaoYuan:~ # php test.php
1250000025000001
2.213 0.000 100.0% 0 0
root@TaoYuan:~ # set time = ( 3 "%U %S %P %r %s" )
root@TaoYuan:~ # php test.php
1250000025000001
第一个命令:设置显示上限为1秒,所有CPU占用超过1s的都显示time结果,time的格式为:用户态时间,内核态时间,CPU占用率,网络接收,网络发送
第二个命令运行test.php,由于test.php运行时间为2.2秒,所以就会在下方自动显示时间,时间格式为所设置的格式。
第三个命令,把CPU占用上限设置为2秒,同样能显示。
第五个命令,把CPU占用上限设置为3秒,再运行同样的程序,就不会显示time值。
如果想开机就有这种效果,把time写进~/.cshrc里面就可以了:
set autorehash
set time = ( 1 "%U %S %P %r %s" )
set mail = (/var/mail/$USER)
自动显示time,这个功能还是挺不错的,特别是在编译内核和大型软件的时候,就不需要再特别地输入time了。