在我负载很重的 Ubuntu 机器上,我运行nice -n 19 time echo
并得到以下输出:
0.00user 0.00system 0:02.80elapsed 0%CPU (0avgtext+0avgdata 1732maxresident)k
312inputs+0outputs (1major+74minor)pagefaults 0swaps
但是,当我运行时,time echo
我得到以下输出:
real 0m0.000s
user 0m0.000s
sys 0m0.000s
更奇怪的是,当我跑步时,nice -n 19 time time
我得到:
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
Command exited with non-zero status 1
0.00user 0.00system 0:03.29elapsed 0%CPU (0avgtext+0avgdata 1344maxresident)k
0inputs+0outputs (0major+67minor)pagefaults 0swaps
但是当我跑步时time time
我只是得到:
real 0m0.000s
user 0m0.000s
sys 0m0.000s
为什么我运行时会得到不同的time
输出nice
?我最初认为它只会产生一个更高的值(例如实际值不会是 0.000s),但看起来命令nice
改变了time
命令。
答案1
长话短说:用于type
检查命令是否是 shell 内置命令。您正在使用 bash 的time
intime xyz
和/usr/bin/time
in nice time xyz
。
用于type <command>
了解您的 shell 使用什么:
$ type time
time is a shell keyword
Inbash
time
是 shell 关键字。这不是time
命令(可以在 中找到which time
)。 bash 中的多个命令都有内置的 shell 关键字,例如echo
、test
等pwd
:
$ type echo test pwd nice time
echo is a shell builtin
test is a shell builtin
pwd is a shell builtin
nice is /usr/bin/nice
time is a shell keyword
请注意,man
在这种情况下将返回错误的文档。您需要help
shell 命令:
$ help time
time: time [-p] pipeline
Report time consumed by pipeline's execution.
Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.
Options:
-p print the timing summary in the portable Posix format
The value of the TIMEFORMAT variable is used as the output format.
Exit Status:
The return status is the return status of PIPELINE.
time
顺便说一句,手册中包含一个提示:
$ 人时间 TIME(1) 通用命令手册 TIME(1) 姓名 定时运行程序并总结系统资源使用情况 概要 时间 [ -apqvV ] [ -f 格式 ] [ -o 文件 ] [ --append ] [ --verbose ] [ --quiet ] [ --portability ] [ --format=FORMAT ] [ --output=FILE ] [ --version ] [ --help ] 命令 [ ARGS ] 描述 时间运行带有任何给定参数 ARG 的程序 COMMAND.... 当 COMMAND 完成时,时间显示有关的信息 COMMAND 使用的资源(在标准错误输出上,通过 默认)。如果 COMMAND 以非零状态退出,则显示时间 警告消息和退出状态。 ... 例子 ... bash shell 的用户需要使用显式路径才能 运行外部时间命令而不是内置的 shell 变体。在时间安装在 /usr/bin 中的系统上, 第一个例子会变成 /usr/bin/time wc /etc/hosts
参考:
man 1 time
info bash time
或man 1 bash
“SHELL GRAMMAR”中的“管道”部分- Linux 命令行,第 43-46 页。
答案2
有两个time
命令可用。一个内置于 shell 中,另一个是文件系统上的可执行文件。正如您所发现的,它们具有不同的输出格式。nice
无法运行 shell 中内置的一个,因此它运行另一个。
答案3
跑步
time nice command ...
使用time
内置于外壳中。
或者,如果您想对整个漂亮的管道进行计时(这几乎是time
在外壳中内置的要点),您需要这样做
time nice bash -c 'some cmd... | other cmd...'
使其nice
适用于整个管道。