当使用 Nice 运行时,运行 time 命令会产生完全不同的输出

当使用 Nice 运行时,运行 time 命令会产生完全不同的输出

在我负载很重的 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 的timeintime xyz/usr/bin/timein nice time xyz


用于type <command>了解您的 shell 使用什么:

$ type time
time is a shell keyword

Inbash time是 shell 关键字。这不是time命令(可以在 中找到which time)。 bash 中的多个命令都有内置的 shell 关键字,例如echotestpwd

$ 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在这种情况下将返回错误的文档。您需要helpshell 命令:

$ 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 timeman 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适用于整个管道。

相关内容