Contents

Linux中time命令简介

1. 概述

在Linux中,我们可以使用time 命令来衡量程序的执行时间。

在本教程中,我们将了解如何使用time以及如何读取其输出。

我们在 Bash 中测试了我们的示例,除非另有说明,否则也应该在其他 POSIX 兼容的 shell 中工作。

2. 测量执行时间

我们可以通过在任何命令前加上time来测量执行时间:

time command

这将执行名为“command”的程序并输出其运行时间:

real 0m2.998s
user 0m0.063s
sys 0m1.616s

输出由三个部分组成。让我们更详细地探讨这些。

3、输出

3.1. 用户时间

在 Linux 中,命令可以在用户模式或系统模式下执行。系统模式的另一个名称是内核模式。

某些命令需要直接且不受限制地访问底层硬件。这些在内核模式下执行。所有其他命令都在用户模式下执行。

** *user *时间表示命令在用户模式下执行的时间。**在我们的例子中,正好是 0.063 秒。

3.2. 系统时间

我们的命令在系统时间模式下运行了 1.616 秒。** sys 表示执行的命令在系统或内核模式下运行的时间。**

3.3. 即时的

实时表示命令运行时经过的实际时间。这是按下回车键和程序终止之间经过的时间。

在上面的例子中,我们的命令执行了 0 分 2.998 秒。这实际上比在用户模式和系统模式下花费的时间总和还要大。那是因为我们在并发环境中运行我们的命令,Linux 必须在多个进程之间平衡资源。

**对于在多个 CPU 内核上运行的多线程进程,real 测量的时间可能小于单个线程报告的在用户和系统模式下花费的总时间。

4. 格式化

默认情况下,time将其输出格式化为显示小时、分钟和秒,例如:

real 1h23m2.998s

因为大多数程序的执行时间都在1小时以下,对于60分钟以下的执行时间, time会省略小时部分。

使用 GNU 1.7 版本的time,我们可以使用带有格式化字符串的*-f*参数来格式化输出。使用自定义格式,我们还可以打印很多其他信息,例如:

time command -f '%E %W %r'

这不仅会打印实际执行时间 ( %E ),还会打印进程从主内存换出的次数 ( %W ) 和进程收到的套接字消息数 ( %r )。

手册页 上提供了所有格式化选项的完整列表。

然而, GNU 1.7 版本的时间与 POSIX 不兼容。大多数 shell,如 Bash,都附带一个没有此格式化选项的 POSIX 兼容版本。