time

测量命令的运行时间与资源使用情况


语法格式

time [-p] command [args]
/usr/bin/time [-apvV] [-f fmt] [-o file] command [args]
/usr/bin/time [--help] [-V|--version]

命令简介

Shell内置的time命令用于运行指定的命令,考察其运行时间。当给定的命令运行结束时,time将会利用标准错误输出,显示程序运行时间的统计数据,包括调用与结束期间总共耗费的时间、以用户模式运行时花费的CPU时间以及以系统模式运行时花费的CPU时间。

GNU版的time具有更强的功能,除了给出上述的命令运行时间统计信息之外,还能提供给定命令占用的内存、I/O和IPC等大量资源信息。注意,若想使用GNU版的time命令,必须使用env命令运行time,或给出完整的路径名/usr/bin/time。

在上述语法格式中,command是欲测定的命令或程序,args是选用的命令参数。

在运行GNU版的time命令时,可以使用“-f”选项指定的格式字符串控制输出的内容与格式,使用“-v”选项输出内定的一组综合信息,或使用“-p”选项显示传统的时间统计信息。如果未指定任何输出控制选项,但TIME环境变量已经设置,也可以使用TIME变量定义的格式字符串控制输出的内容与格式。

GNU版time命令默认的输出格式字符如下:

%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k %Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps

time内置命令或在GNU版的time命令中指定了“-p”选项时,输出格式如下:

real %e
user %U
sys %S

命令选项

-o file, --output=file  把各种统计数据的输出结果写入指定的文件,而非标准输出。注意,这种做法通常会覆盖指定的文件,如果文件存在,将会毁灭原有的数据内容。

-a, --append  采用追加方式把命令的运行时间或资源占用等统计数据写到指定文件的后面,而不是覆盖输出文件。这个选项只能与“-o”选项一起使用。

-f fmt, --format fmt  采用指定的格式字符串,控制time命令输出的时间或资源内容与格式。详见下面的说明。

-p, --portability  采用POSIX 1003.2标准兼容的传统输出格式显示执行给定命令时的时间测量数据(单位秒)。

-v, --verbose  采用time命令内定的单列标题与内容,逐项显示各种时间与资源使用情况的统计数据。

输出格式字符串

格式字符串采用“%c”形式的转换字符表示选择的输出内容,分类列举如下:

时间花费

%E  进程实际耗费的时间,以[hours:]minutes:seconds的形式表示。

%e  以秒表示的实际耗费时间。

%S  进程处于核心模式花费的CPU时间总和(单位秒)。

%U  进程处于用户模式花费的CPU时间总和(单位秒)。

%P  进程实际占用的CPU时间与总共花费时间的百分比,即(%U+%S)/%E。

内存占用

%M  进程在其生命周期期间的最大驻留内存空间(单位KB)

%t  进程的平均驻留内存空间(单位KB)。

%K  进程各组件(代码空间+数据区+栈空间)总共占用内存的平均值(单位KB)。

%D  进程非共享数据区的平均大小(单位KB)。

%p  进程非共享栈空间的平均大小(单位KB)。

%X  进程共享代码空间的平均大小(单位KB)。

%Z  系统内存页面的大小(单位字节)。对于每个系统而言,这个数值是固定不变的,但在不同的系统之间,这个数值可能会有不同。

%F  进程运行期间出现的主要页面故障(必须读盘获取页面数据时产生的页面故障)数量。

%R  进程运行期间出现的次要或可恢复的页面故障数量。

%W  进程从内存导入交换区的次数。

%c  进程因时间片因素做上下文切换的次数。

%w  进程因等待I/O操作完成等原因而做上下文切换的次数。

I/O统计

%I  进程读取文件系统的次数。

%O  进程写入文件系统的次数。

%r  进程从套接字接收的消息数量。

%s  进程发送给套接字的消息数量。

%k  发送给进程的信号数量。

其他

%C  time命令考察的命令与命令行参数等。

%x  命令返回的结束状态。

普通字符可以直接显示,制表符、换行符、反斜线等特殊字符可以使用“\t”、“\n”和“\\”等转义字符表示。单个百分号可以使用“%%”表示。time命令在输出每个数据之后都会附加一个换行符。因此,指定格式字符串时通常不必在最后加换行符之类的终止符。

应用实例

1. time内置命令与GNU版time命令的常规输出。

$ time date
Sun Mar 18 05:23:43 CST 2012

real    0m0.002s
user    0m0.000s
sys     0m0.001s
$ /usr/bin/time date
Sun Mar 18 05:24:23 CST 2012
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 2560maxresident)k
0inputs+0outputs (0major+195minor)pagefaults 0swaps
$

2. 使用格式字符串定制输出的格式与内容。

$ /usr/bin/time –f "%E,  %U,  %S\n%M,  %K" date
Sun Mar 18 05:26:06 CST 2012
0:00.00,  0.00,  0.00
2560,  0
$

3. 使用TIME环境变量控制输出的格式与内容。

$ export TIME="%E,  %U,  %S\n%M,  %K"
$ /usr/bin/time date
Sun Mar 18 05:27:30 CST 2012
0:00.00,  0.00,  0.00
2672,  0
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z