在命令行中使用“时间”时什么是“系统时间”

Alr*_*ekr 11 time

我使用在 Ubuntu 14.04 的标准终端上time计时Perl脚本。

读过real time是秒表时间;作为用户,我花时间查看从启动程序到终止的程序。但我不明白是什么usersys时间是什么。time至少可以说,手册页是模糊的。

虽然有点清楚real时间是分开的usersys但不清楚它们代表什么。

在我的脚本中,我正在对 C++ 和 Perl 进行基准测试 [1] 以查看差异,并且我想知道我实际获得了哪些数据。一个示例输出是:

real    0m24.198s
user    0m23.120s
sys     0m1.030s
Run Code Online (Sandbox Code Playgroud)

有人可以详细说明默认的时间格式告诉用户什么吗?我是 Linux 的新手,所以请不要假设太多。

[1] 有趣的是,虽然在我的基准测试中,C++ 在real时间方面比 Perl 快得多,但sys时间差别不大,实际上 C++ 使用的sys时间比 Perl 多。这就是为什么我想知道它们是什么意思

Kon*_*nos 16

来自维基百科

  • 用户时间与系统时间

术语“用户 CPU 时间”起初可能有点误导。需要明确的是,总 CPU 时间是 CPU 为程序执行某些操作所花费的时间和 CPU 代表程序执行内核系统调用所花费的时间的组合。当程序循环遍历数组时,它正在累积用户 CPU 时间。相反,当程序执行诸如 exec 或 fork 之类的系统调用时,它正在积累系统 CPU 时间。

  • 实时与 CPU 时间

在此上下文中,术语“实时”是指经过的“挂钟”时间,例如使用秒表。总 CPU 时间(用户时间 + 系统时间)可能大于或小于该值。因为一个程序可能会花费一些时间等待并且根本不执行(无论是在用户模式还是系统模式下),所以实际时间可能大于总 CPU 时间。因为程序可能会 fork 其 CPU 时间(用户和 sys)被添加到 time 命令报告的值的孩子,所以总 CPU 时间可能大于实际时间。