Увеличьте точность% e с помощью команды / usr / bin / time shell

Когда я запускаю команду времени во time ./myapp оболочки time ./myapp я получаю вывод следующим образом:

 real 0m0.668s user 0m0.112s sys 0m0.028s 

Однако, когда я запускаю команду \time -f %e ./myapp я теряю точность, и я получаю:

 2.01s 

Если я использую команду %E я также теряю точность таким же образом. Как изменить его, чтобы снова получить более высокую точность, но все же есть только секунды вывода?

Я основывал свои исследования в этой Linux / Unix Command: время и по этому вопросу

Я предполагаю, что вы понимаете, что обе эти команды вызывают разную версию времени, верно?

Встроенная версия bash

 % time 

Время GNU aka. / USR / бен / время

 % \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 /usr/bin/time обычно более полезно, чем встроенное.

Что касается вашей точной проблемы, то здесь она рассматривается здесь, в частности:

Почему время bash более точное, чем время GNU?

Встроенное время командной строки bash дает миллисекундную точность выполнения, а время GNU (обычно / usr / bin / time) дает центробежную точность. Время (2) syscall дает время в часах, а 100 часов = 1 секунду (обычно), поэтому точность похожа на время GNU. Что такое использование времени bash, чтобы оно было более точным?

Время Bash внутренне использует getrusage (), а время GNU использует times (). getrusage () гораздо точнее из-за разрешения микросекунды.

Вы можете увидеть centiseconds в следующем примере ( см. 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 

Больше разрешения может быть выполнено с помощью команды time bash так, и вы можете управлять разрешением:

 # 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.