The total CPU time is the combination of the amount of time the CPU or CPUs spent performing some action for a program and the amount of time they spent performing system calls for the kernel on the program's behalf. When a program loops through an array, it is accumulating user CPU time. Conversely, when a program executes a system call such as exec or fork, it is accumulating system CPU time.
The term "real time" in this context refers to elapsed wall-clock time, like using a stop watch. The total CPU time may be more or less than that value. Because a program may spend some time waiting and not executing at all the real time may be greater than the total CPU time. Because a program may fork children whose CPU times are added to the values reported by the time command, but on a multicore system these tasks are run in parallel, the total CPU time may be greater than the real time.
Usage
To use the command, simply precede any command by the wordtime, such as: $ time ls When the command completes, time will report how long it took to execute the ls command in terms of user CPU time, system CPU time, and real time. The output format varies between different versions of the command, and some give additional statistics, as in this example: $ time host wikipedia.org wikipedia.org has address 103.102.166.224 wikipedia.org mail is handled by 50 mx2001.wikimedia.org. wikipedia.org mail is handled by 10 mx1001.wikimedia.org. host wikipedia.org 0.04s user 0.02s system 7% cpu 0.780 total
Portable scripts should use time -p mode, which uses a different output format, but which is consistent with various implementations: $ time -p sha256sum /bin/ls 12477deb0e25209768cbd79328f943a7ea8533ece70256cdea96fae0ae34d1cc /bin/ls real 0.00 user 0.00 sys 0.00
Current versions of GNU time, report more than just a time by default: $ /usr/bin/time sha256sum /bin/ls 12477deb0e25209768cbd79328f943a7ea8533ece70256cdea96fae0ae34d1cc /bin/ls 0.00user 0.00system 0:00.00elapsed 100%CPU k 0inputs+0outputs pagefaults 0swaps
Format of the output for GNU time, can be adjusted using TIMEenvironment variable, and it can include information other than the execution time. This behavior is not available in general POSIX-compliant time, or when executing as time -p. Documentation of this time can be usually accessed using man 1 time.
Method of operation
According to the source code of the GNU implementation of time, most information shown by time is derived from the wait3 system call. On systems that do not have a wait3 call that returns status information, the times system call is used instead.
In a popular Unix shell Bash, time is a special keyword, that can be put before a pipeline, that measures time of entire pipeline, not just a singular command, and uses a different default format, and puts empty line before reporting times: $ time seq 10000000 | wc -l 10000000 real 0m0.078s user 0m0.116s sys 0m0.029s
The reported time is a time used by both seq and wc -l added up. Format of the output can be adjusted using TIMEFORMATvariable. The time is not a builtin, but a special keyword, and can't be treated as a function or command. It also ignores pipeline redirections. Documentation of this time can be accessed using man 1 bash, or within bash itself using help time.