linux time命令是一个用来测量程序运行时间的工具,它可以显示出程序执行的总时间、用户态时间和内核态时间,以及其他一些信息,如内存占用、上下文切换等。
linux time命令的语法格式如下:
time [选项] [命令] [参数]
其中,选项可以是以下几种:
- p:以POSIX格式输出结果,即只显示总时间、用户态时间和内核态时间,每个时间占一行,单位为秒。
- v:以详细格式输出结果,即显示更多的信息,如内存占用、上下文切换、信号接收等。
- o file:将结果输出到指定的文件中,而不是标准输出。
- a:与-o选项配合使用,表示将结果追加到指定的文件中,而不是覆盖原有内容。
- f format:指定输出结果的格式,可以使用一些预定义的变量,如%e表示总时间,%U表示用户态时间,%S表示内核态时间等。具体的变量列表可以参考man time命令。
下面举几个例子来说明time命令的用法:
1. 测量ls命令的执行时间:
time ls
a.txt b.txt c.txt
real 0m0.003s
user 0m0.000s
sys 0m0.003s
这里显示了ls命令的总时间(real)、用户态时间(user)和内核态时间(sys),单位为分秒。
2. 以POSIX格式测量ls命令的执行时间:
time -p ls
a.txt b.txt c.txt
real 0.00
user 0.00
sys 0.00
这里只显示了三个时间,每个时间占一行,单位为秒。
3. 以详细格式测量ls命令的执行时间:
time -v ls
a.txt b.txt c.txt
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2148
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 173
Voluntary context switches: 1
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
这里显示了更多的信息,如最大内存占用、页面错误、上下文切换等。
4. 将结果输出到文件中:
time -o result.txt ls
a.txt b.txt c.txt
cat result.txt
real 0m0.003s
user 0m0.000s
sys 0m0.003s
这里将结果输出到result.txt文件中,而不是标准输出。
5. 将结果追加到文件中:
time -a -o result.txt ls -l
total 12
-rw-r--r--. 1 user user 6 Jul 28 01:45 a.txt
-rw-r--r--. 1 user user 6 Jul 28 01:45 b.txt
-rw-r--r--. 1 user user 6 Jul 28 01:45 c.txt
cat result.txt
real 0m0.003s
user 0m0.000s
sys 0m0.003s
real 0m0.004s
user 0m0.000s
sys 0m0.004s
这里将结果追加到result.txt文件中,而不是覆盖原有内容。
6. 指定输出结果的格式:
time -f "Total: %e\nUser: %U\nSys: %S" ls
a.txt b.txt c.txt
Total: 0.00
User: 0.00
Sys: 0.00
这里指定了输出结果的格式,使用了一些预定义的变量,如%e表示总时间,%U表示用户态时间,%S表示内核态时间等。