이 두 명령이 다른 버전의 시간을 호출한다는 것을 이해하고 있다고 가정합니다.
bash의 내장 버전
% time
GNU 시간 일명. / usr / bin / 시간
% \time
내장 time
명령 bash
은 여기에서 읽을 수 있습니다.
% help time
time: time [-p] PIPELINE
Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.
The return status is the return status of PIPELINE. The `-p' option
prints the timing summary in a slightly different format. This uses
the value of the TIMEFORMAT variable as the output format.
는 GNU는 time
, /usr/bin/time
일반적으로 더 유용 내장보다.
정밀도 문제에 대해서는이 github gist 에서 구체적으로 설명합니다.
bash 시간이 GNU 시간보다 정확한 이유는 무엇입니까?
내장 된 bash 명령 시간은 밀리 초의 실행 정밀도를 제공하며 GNU 시간 (일반적으로 / usr / bin / time)은 센티 초 정밀도를 제공합니다. times (2) syscall은 시계로 시간을 제공하고 100 개 클럭 = 1 초 (보통)이므로 정밀도는 GNU 시간과 같습니다. 더 정확한 bash 시간은 무엇입니까?
배쉬 타임은 내부적으로 getrusage ()를 사용하고 GNU 타임은 times ()를 사용합니다. getrusage ()는 마이크로 초 해상도로 인해 훨씬 정확합니다.
다음 예제에서 센티 초를 볼 수 있습니다 ( 5 번째 출력 라인 참조 ).
% /usr/bin/time -v sleep .22222
Command being timed: "sleep .22222"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.22
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1968
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 153
Voluntary context switches: 2
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
bash time
명령을 사용하면 더 많은 해상도를 얻을 수 있으며 해상도를 제어 할 수 있습니다.
# 3 places
% TIMEFORMAT='%3R'; time ( sleep .22222 )
0.224
변수에 대한 Bash 매뉴얼에서 :
TIMEFORMAT
The value of this parameter is used as a format string specifying how the timing information for pipelines prefixed with the time reserved word should be displayed. The ‘%’ character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as follows; the braces denote optional portions.
%%
A literal ‘%’.
%[p][l]R
The elapsed time in seconds.
%[p][l]U
The number of CPU seconds spent in user mode.
%[p][l]S
The number of CPU seconds spent in system mode.
%P
The CPU percentage, computed as (%U + %S) / %R.
The optional p is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no decimal point or fraction to be output. At most three places after the decimal point may be specified; values of p greater than 3 are changed to 3. If p is not specified, the value 3 is used.
The optional l specifies a longer format, including minutes, of the form MMmSS.FFs. The value of p determines whether or not the fraction is included.
If this variable is not set, Bash acts as if it had the value
$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
If the value is null, no timing information is displayed. A trailing newline is added when the format string is displayed.