time 命令详解

| 选择喜欢的代码风格  

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

time 命令安装:


-bash: time: command not found

#Debian
apt-get install time

#Ubuntu
apt-get install time

#Arch Linux
pacman -S time

#Kali Linux
apt-get install time

#CentOS
yum install time

#Fedora
dnf install time

#Raspbian
apt-get install time

time 命令补充说明:


time 命令使用给定参数运行指定的程序命令。 命令完成后,时间将消息写入标准错误,提供有关此程序运行的计时统计信息。 这些统计信息包括:

  • 调用和终止之间经过的实时时间。
  • 用户CPU时间。
  • 系统CPU时间。

time 命令语法:


time [-p] command [arguments...]

time 命令选项:


-p  如果指定了-p,则定时摘要以可移植POSIX格式打印。

time 命令参数:


指令:指定需要运行的额指令及其参数。

time 命令实例


当测试一个程序或比较不同算法时,执行时间是非常重要的,一个好的算法应该是用时最短的。所有类 UNIX 系统都包含 time 命令,使用这个命令可以统计时间消耗。例如:

$ time ls
clk_1621.log   fail_1611.log  fail_1622.log  fail_1633.log  pv_1625.log  pv_1636.log   req_1609.log  req_1620.log  req_1631.log  res_1622.log  res_1633.log  win_1625.log  win_1636.log
fail_1601.log  fail_1612.log  fail_1623.log  fail_1634.log  pv_1626.log  pv_1637.log   req_1610.log  req_1621.log  req_1632.log  res_1623.log  res_1634.log  win_1626.log  win_1637.log
fail_1602.log  fail_1613.log  fail_1624.log  fail_1635.log  pv_1627.log  pv_1638.log   req_1611.log  req_1622.log  req_1633.log  res_1624.log  res_1635.log  win_1627.log  win_1638.log
fail_1603.log  fail_1614.log  fail_1625.log  fail_1636.log  pv_1628.log  req_1601.log  req_1612.log  req_1623.log  req_1634.log  res_1625.log  res_1636.log  win_1628.log
fail_1604.log  fail_1615.log  fail_1626.log  fail_1637.log  pv_1629.log  req_1602.log  req_1613.log  req_1624.log  req_1635.log  res_1626.log  res_1637.log  win_1629.log
fail_1605.log  fail_1616.log  fail_1627.log  fail_1638.log  pv_1630.log  req_1603.log  req_1614.log  req_1625.log  req_1636.log  res_1627.log  res_1638.log  win_1630.log
fail_1606.log  fail_1617.log  fail_1628.log  pv_1620.log    pv_1631.log  req_1604.log  req_1615.log  req_1626.log  req_1637.log  res_1628.log  win_1620.log  win_1631.log
fail_1607.log  fail_1618.log  fail_1629.log  pv_1621.log    pv_1632.log  req_1605.log  req_1616.log  req_1627.log  req_1638.log  res_1629.log  win_1621.log  win_1632.log
fail_1608.log  fail_1619.log  fail_1630.log  pv_1622.log    pv_1633.log  req_1606.log  req_1617.log  req_1628.log  res_1612.log  res_1630.log  win_1622.log  win_1633.log
fail_1609.log  fail_1620.log  fail_1631.log  pv_1623.log    pv_1634.log  req_1607.log  req_1618.log  req_1629.log  res_1620.log  res_1631.log  win_1623.log  win_1634.log
fail_1610.log  fail_1621.log  fail_1632.log  pv_1624.log    pv_1635.log  req_1608.log  req_1619.log  req_1630.log  res_1621.log  res_1632.log  win_1624.log  win_1635.log

real    0m0.002s
user    0m0.002s
sys     0m0.001s

输出的信息分别显示了该命令所花费的 real 时间、user 时间和 sys 时间:

  • real 时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
  • user 时间是指进程花费在用户模式中的 CPU 时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
  • sys 时间是指花费在内核模式中的 CPU 时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的 CPU 时间。

Shell 内建也有一个 time 命令,当运行 time 时候是调用的系统内建命令,应为系统内建的功能有限,所以需要时间其他功能需要使用 time 命令可执行二进制文件 /usr/bin/time

使用 -o 选项将执行时间写入到文件中:

/usr/bin/time -o outfile.txt ls

使用 -a 选项追加信息:

/usr/bin/time -a -o outfile.txt ls

使用 -f 选项格式化时间输出:

/usr/bin/time -f "time: %U" ls

-f 选项后的参数:

参数 描述
%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 进程被迫进行上下文切换的次数(由于时间片到期)。

time 命令扩展阅读:




time 命令评论