Linux time命令用法(time指令)(计算程序执行时间、运行时间)/usr/bin/time、real(实际时间)、user(用户CPU时间)、sys(系统CPU时间)挂钟时间

Dontla 2024-07-31 11:37:01 阅读 63

文章目录

Linux time 命令用法详解注意:对于`time`命令,实际上有两个版本。一个是shell的内建(builtin)命令,另一个是/bin或/usr/bin下的独立可执行程序。本文将以`$(which time)`对应的time讲解time命令用法1. 基本语法2. 常见选项3. 输出解析real(实际时间)user(用户CPU时间)sys(系统CPU时间)

4. 使用示例4.1 测量简单命令的运行时间4.2 使用 `-p` 选项为什么说time -p参数使输出更具有可移植性?

4.3 使用 `-v` 选项`-v`选项结果解读

5. 疑难解析:区分real、user和sys时间6. 结论

Linux time 命令用法详解

Linux <code>time命令是一个非常实用的工具,主要用于计算程序执行的时间。这个命令可以用来度量一段代码或者脚本的运行时间,有助于性能调优和基准测试。

注意:对于time命令,实际上有两个版本。一个是shell的内建(builtin)命令,另一个是/bin或/usr/bin下的独立可执行程序。本文将以$(which time)对应的time讲解time命令用法

在许多shell中(例如bash和dash),time是一个内建命令,它只支持-p选项。在这些shell中执行time命令时,即使你安装了独立的/usr/bin/time程序,也会优先使用内建命令。

另一方面,/usr/bin/time/bin/time是一个独立的可执行程序,它提供了更多的功能和选项,包括-v选项。

如果想使用-v选项,需要确保调用的是独立的time程序。可以通过指定完整的路径来调用它,例如:

/usr/bin/time -v ls

或者,如果不确定time程序的具体位置,也可以使用which命令来查找:

$(which time) -v ls

如果发现系统中没有/usr/bin/time/bin/time,可能是因为没有安装。在Ubuntu或Debian系的系统中,可通过下面的命令进行安装:

sudo apt-get install time

1. 基本语法

time [options] command [arguments...]

这里,options表示命令选项,command表示要执行的命令,arguments表示命令参数。

在这里插入图片描述

2. 常见选项

<code>-p:以可移植输出格式打印实际时间、用户 CPU 时间和系统 CPU 时间。-v:提供更详细的信息,包括进程使用的系统资源。

3. 输出解析

time命令通常会输出三种时间:

real(实际时间)

从开始到结束的墙钟时间(wall-clock time)。也就是我们常说的实际时间。

user(用户CPU时间)

在用户模式中执行该过程所花费的CPU时间。

sys(系统CPU时间)

在内核模式中执行该过程所花费的CPU时间。

4. 使用示例

下面通过几个例子来展示time命令的使用。

4.1 测量简单命令的运行时间

$(which time) ls

这条命令将测量ls命令的运行时间。

在这里插入图片描述

4.2 使用 <code>-p 选项

$(which time) -p ls

使用 -p 选项,可以使输出更具可移植性。

在这里插入图片描述

注意结果单位为秒。

为什么说time -p参数使输出更具有可移植性?

<code>-p参数在time命令中,是用来输出可移植格式的时间信息。这种格式相对简单,不依赖于特定的区域设置或者语言环境。

在没有使用-p参数时,time命令的输出格式可能会受到操作系统、Shell版本或者地区设置的影响。例如,在某些系统上,默认的输出格式可能包括毫秒级别的精度,而在其他系统上,则只有秒级别的精度。或者在一些非英文的环境下,“real”、"user"和"sys"可能会被翻译成其他语言。

但当使用了-p参数后,无论在何种环境下,time命令都会以固定的格式来输出结果:每种时间信息占一行,时间类型和具体数值之间由一个空格分隔,时间数值保留到小数点后两位。这种格式简洁明了,不会受到任何外部因素的干扰,更适合在脚本中进行解析或者在不同系统之间进行比较。

4.3 使用 -v 选项

$(which time) -v ls

使用 -v 选项,可以获得关于进程使用的系统资源的详细信息。

在这里插入图片描述

<code>-v选项结果解读

Command being timed: 被测量时间的命令User time (seconds): 在用户模式中运行所消耗的CPU时间(单位:秒)System time (seconds): 在内核模式中运行所消耗的CPU时间(单位:秒)Percent of CPU this job got: 这个任务获得的CPU时间百分比Elapsed (wall clock) time: 实际过去的时间,也被称为挂钟时间(格式:小时:分钟:秒 或 分钟:秒)Average shared text size: 平均共享文本区域大小(单位:KB)Average unshared data size: 平均非共享数据区域大小(单位:KB)Average stack size: 平均栈大小(单位:KB)Average total size: 平均总大小(单位:KB)Maximum resident set size: 最大常驻集大小,即进程在内存中占用的最大物理内存空间(单位:KB)Major (requiring I/O) page faults: 需要进行I/O操作的主要缺页次数Minor (reclaiming a frame) page faults: 不需要进行I/O操作的次要缺页次数Voluntary context switches: 自愿上下文切换的次数Involuntary context switches: 非自愿上下文切换的次数Swaps: 交换次数File system inputs: 文件系统输入操作的数量File system outputs: 文件系统输出操作的数量Socket messages sent: 发送的套接字消息数量Socket messages received: 接收的套接字消息数量Signals delivered: 交付的信号数量Page size (bytes): 页面大小(单位:字节)Exit status: 命令退出状态,0通常表示成功执行

5. 疑难解析:区分real、user和sys时间

real:此时间是指从命令开始执行到结束的总体时间,包括其他进程占用的CPU时间和该进程在等待I/O或者执行某些操作时所经过的时间。user:此时间是指CPU在执行用户模式代码所花费的时间。这包括执行调用库函数(不涉及系统调用)的时间。sys:此时间是指CPU在执行内核模式代码所花费的时间。这通常涉及到一些系统调用,例如进行文件或网络I/O的调用。

注意,如果在多核处理器上运行程序,用户和系统时间可能超过实际时间。因为多个CPU核心可以同时工作,可能会累积更多的CPU时间。

6. 结论

time命令是一个强大的工具,它可以帮助开发人员测量和优化代码性能。通过了解其基本用法和输出,可以更好地理解程序的执行情况,为性能优化提供依据。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。