如何在Linux中找到命令或者进程的执行时间

时间:2020-03-21 11:44:27  来源:igfitidea点击:

我们可能知道命令/进程的开始时间以及进程在UNIX的系统中运行的时间。

但是,我们如何知道命令或者流程结束何时和/或者命令/流程完成的总时间是什么时候?
好吧,这很容易!在类似UNIX的系统上,有一个名为"GNU TIME"的实用程序,专门为此目的而设计。
使用时间实用程序,我们可以轻松测量Linux操作系统中的命令或者程序的总执行时间。
好事是'time'命令在大多数Linux发行版中预装,所以你不必打扰安装。

查找Linux中的命令或者进程的执行时间

测量命令/程序的执行时间,刚刚运行。

$/usr/bin/time -p ls

或者,

$time ls

示例输出:

dir1 dir2 file1 file2 mcelog
real 0m0.007s
user 0m0.001s
sys 0m0.004s
$time ls -a
. .bash_logout dir1 file2 mcelog .sudo_as_admin_successful
.. .bashrc dir2 .gnupg .profile .wget-hsts
.bash_history .cache file1 .local .stack
real 0m0.008s
user 0m0.001s
sys 0m0.005s

上面的命令显示"ls"命令的总执行时间。
用我们选择的任何命令/进程替换"LS"以找到总执行时间。

其中

  • 真实 - refers命令/程序所花费的总时间,
  • 用户 - 引用程序在用户模式下所花费的时间,
  • sys - 指程序在内核模式下采取的时间。

我们也可以限制仅在一定时间内运行的命令。

时间vs/usr/bin/time

正如我们所明白的那样,我们在上面的例子中使用了两个命令'时间'和'/usr/bin/time'。
所以,你可能想知道它们之间有什么区别。

首先,让我们看看实际上'time'是什么使用'type'命令。
对于那些不知道的人,类型命令用于找出有关Linux命令的信息。
有关更多详细信息,请参阅此教程。

$type -a time
time is a shell keyword
time is /usr/bin/time

如上所述,时间都是,

  • 一个内置于bash shell中的关键字
  • 例如,可执行文件:/usr/bin/time

由于shell关键字优先于可执行文件,因此只需在没有完整路径的情况下运行时命令时,就会运行内置shell命令。
但是,当我们运行/usr/bin/time时,我们可以运行真正的GNU时间程序。
因此,为了访问真实命令,我们可能需要指定其显式路径。
清除?
好的!

内置的"时间"shell关键字在大多数shell中可用,如bash,zsh,csh,ksh,tcsh等.'time'shell关键字比可执行文件更少。
我们可以在'time'关键字中使用的唯一选项是-p。

我们现在知道如何使用'time'命令找到给定命令/进程的总执行时间。
想要更多地了解'GNU时间'实用程序?
阅读!

关于"GNU时间"计划的简要介绍

GNU时间程序运行具有给定参数的命令/程序,并在命令完成后,将系统资源使用作为标准输出。
与'time'关键字不同,GNU时间程序不仅仅显示命令/进程所使用的时间,还可以显示内存,I/O和IPC调用等其他资源。

time命令的典型语法是:

/usr/bin/time [options] command [arguments...]

上面语法中的"选项"是指一组标志,可以与Time命令一起使用以执行特定功能。
下面给出的可用选项列表。

  • -f,--format - 使用此选项根据需要指定输出的格式。
  • -p,--portability - 使用便携式输出格式。
  • -o file,--output = file - 将输出写入文件而不是显示为标准输出。
  • -a, - append - 将输出添加到文件而不是覆盖它。
  • -v, - verbose - 此选项显示"时间"实用程序输出的详细说明。
  • --quiet - 此选项可防止时间"时间"实用程序报告程序的状态。

在没有任何选项的情况下使用"GNU时间"程序时,我们将看到如下所示的输出。

$/usr/bin/time wc /etc/hosts
9 28 273 /etc/hosts
0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2024maxresident)k
0inputs+0outputs (0major+73minor)pagefaults 0swaps

如果使用Shell内置关键字"Time"运行相同的命令,则输出将有点不同:

$time wc /etc/hosts
9 28 273 /etc/hosts
real 0m0.006s
user 0m0.001s
sys 0m0.004s

有时,我们可能希望将系统资源使用输出写入文件而不是在终端中显示。
为此,请使用如下面的-o标志。

$/usr/bin/time -o file.txt ls
dir1 dir2 file1 file2 file.txt mcelog

正如我们在输出中看到的,时间实用程序不显示输出。
因为,我们将输出写入名为file.txt的文件。
让我们看看这个文件:

$cat file.txt 
0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k
0inputs+0outputs (0major+106minor)pagefaults 0swaps

当我们使用-o标志时,如果没有名为'file.txt'的文件,它将其中创建和写入输出。
如果File.txt已存在,则会覆盖其内容。

我们还可以将输出添加到文件,而不是使用-a标志覆盖它。

$/usr/bin/time -a file.txt ls

-f标志允许用户根据他/她的喜好控制输出的格式。
例如,以下命令显示"LS"命令的输出,并显示用户,系统和总时间。

$/usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls
dir1 dir2 file1 file2 mcelog
0:00.00 real, 0.00 user, 0.00 sys

请注意,内置的shell命令'time'不支持GNU时间计划的所有功能。

有关GNU Time Utility的更多详细信息,请参阅man页面。

$man time

要了解更多关于Bash内置'Time'关键字,请运行:

$help time