La salida de echo $SHELL
muestra que está ejecutando zsh
- no bash
. zsh
es el shell por defecto en las versiones recientes de MacOS. La dirección time
es ejecutado por el shell en lugar de ejecutar un comando separado time
(pero, curiosamente, no aparece como un programa integrado en el shell). La documentación, bastante escueta, está disponible ejecutando man zshmisc
:
tiempo [ pipeline ] El pipeline se ejecuta, y las estadísticas de tiempo se reportan en el error estándar en la forma especificada por el parámetro TIMEFMT . Si se omite pipeline, se imprimen estadísticas sobre el proceso shell y sus hijos.
El significado del parámetro TIMEFMT puede averiguarse ejecutando man zshparam
:
TIMEFMT
The format of process time reports with the time keyword. The default is `%J %U user %S system %P cpu %*E total'.
Reconoce las siguientes secuencias de escape, aunque no todas pueden ser disponibles en todos los sistemas, y algunas disponibles pueden no ser útiles:
%% A `%'.
%U CPU seconds spent in user mode.
%S CPU seconds spent in kernel mode.
%E Elapsed time in seconds.
%P The CPU percentage, computed as 100*(%U+%S)/%E.
%W Number of times the process was swapped.
%X The average amount in (shared) text space used in kilobytes.
%D The average amount in (unshared) data/stack space used in kilobytes.
%K The total space used (%X+%D) in kilobytes.
%M The maximum memory the process had in use at any time in kilobytes.
%F The number of major page faults (page needed to be brought from disk).
%R The number of minor page faults.
%I The number of input operations.
%O The number of output operations.
%r The number of socket messages received.
%s The number of socket messages sent.
%k The number of signals received.
%w Number of voluntary context switches (waits).
%c Number of involuntary context switches.
%J The name of this job.
A star may be inserted between the percent sign and flags printing time (e.g., `%*E'); this causes the time to be printed
en hh:mm:ss.ttt' format (hours and minutes are only printed if they are not zero). Alternatively,
m' o u' may be used (e.g.,
%mE') para producir la salida de tiempo en milisegundos o microsegundos, respectivamente.
De esto se pueden aprender varias cosas:
Las mediciones de tiempo realizadas por time
cubre tanto el tiempo utilizado por zsh
(para interpretar su script de shell) así como el tiempo utilizado por cualquier comando generado por el script de shell para hacer el trabajo real.
Las mediciones de tiempo se dividen en una parte de "usuario" y otra de "sistema". Se considera que un programa consume tiempo de "usuario" cuando se está ejecutando por sí solo (es decir, haciendo cálculos, moviendo datos por la RAM, etc.). Consume tiempo de "sistema" cuando ha pedido al sistema operativo que haga algo en su nombre (por ejemplo, leer datos de un archivo, enviar datos por una red, etc.).
Además de lo anterior, verás que la última parte de la salida es el tiempo total. Esto se entiende como un tiempo de "reloj de pared". Es decir, la cantidad de tiempo transcurrido en modo "usuario" y "sistema" se determina como la cantidad de tiempo que el programa está de alguna manera consumiendo tiempo del procesador, mientras que el tiempo total es la cantidad de tiempo transcurrido en el mundo real - incluyendo el tiempo en el que el programa no está haciendo nada activamente y el sistema tampoco está haciendo nada en nombre del programa.
Por último, la parte "99% cpu" indica la relación entre el consumo combinado de tiempo del usuario y del sistema y el tiempo total del reloj de pared. Para ti, la medida "99%" significa que tu programa estuvo de alguna forma utilizando activamente la CPU casi todo el tiempo. Un número bajo indicaría que el sistema estuvo ocupado con otras cosas, y tu programa tuvo periodos de tiempo ocioso.