Created: Fang lungang 03-08-2007 Modified: Fang lungang 03-08-2007 22:04>
“time” 是 unix 下的一个工具,但同时也是 bash 等 shell 的关键字。两者都 是来测量时间,所以以前一直没注意到其实有两个“time”。
两者最明显的区别是输出格式不同,但更深层次的区别是:作为外部命令的 time, 被测量的程序名是 time 的参数,time 负责来调用相应的程序; 而作为关键字的 time 则是用来修饰测量的命令(准确的说应该是管道),我的理解是不论有没有 time 对被测试程序本身的运行方式没有影响。
time 作为 shell 关键字还有一个优点(引自 man page ):
The use of `time' as a reserved word permits the timing of shell builtins, shell functions, and pipelines. An external `time' command cannot time these easily.
由于两者本质的不同,导致相同的命令形式产生的结果却不太一样。以下是一些例 子。
[/home/lungangfang/tmp]type -a time
time is a shell keyword
time is /usr/bin/time
[/home/lungangfang/tmp]./a.out
stdout of program
stderr of program
[/home/lungangfang/tmp]time ./a.out
stdout of program
stderr of program
real 0m0.001s
user 0m0.000s
sys 0m0.000s
[/home/lungangfang/tmp]/usr/bin/time ./a.out
stdout of program
stderr of program
0.00user 0.01system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (82major+11minor)pagefaults 0swaps
[/home/lungangfang/tmp]
关键字的输出重定向:
[/home/lungangfang/tmp]time ./a.out 2> time.out
stdout of program
real 0m0.021s
user 0m0.000s
sys 0m0.000s
[/home/lungangfang/tmp]cat time.out
stderr of program
[/home/lungangfang/tmp](time ./a.out) 2> time.out
stdout of program
[/home/lungangfang/tmp]cat time.out
stderr of program
real 0m0.001s
user 0m0.000s
sys 0m0.000s
外部命令的输出重定向:
[/home/lungangfang/tmp]/usr/bin/time ./a.out 2> time.out
stdout of program
[/home/lungangfang/tmp]cat time.out
stderr of program
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (82major+12minor)pagefaults 0swaps
[/home/lungangfang/tmp]/usr/bin/time -o time.out ./a.out
stdout of program
stderr of program
[/home/lungangfang/tmp]cat time.out
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (81major+15minor)pagefaults 0swaps