time

統計給定命令所花費的總時間

補充說明

time 命令是用來確定一個給定的命令需要運行多長時間。它對於測試你的腳本和命令的性能很有用。

例如,如果你有兩個不同的腳本在做同樣的工作,你想知道哪一個表現得更好,你可以用 Linux 的時間命令來確定每個腳本的執行時間。

該指令是 shell 內指令,也是一個軟件包,對於軟件包的說明在這篇文檔靠下的部分

語法

1time <指令>

參數

指令:指定需要運行的額指令及其參數。

實例

當測試一個程序或比較不同算法時,執行時間是非常重要的,一個好的算法應該是用時最短的。所有類UNIX系統都包含time命令,使用這個命令可以統計時間消耗。例如:

1$ time ls
2anaconda-ks.cfg  install.log  install.log.syslog  satools  text
3
4real    0m0.009s
5user    0m0.002s
6sys     0m0.007s

這裏的輸出會因爲使用的發行版本不同而導致展示的結果不同,比如:

 1# Bash
 2real 0m33.961s
 3user 0m0.340s
 4sys 0m0.940s
 5
 6# Zsh
 70.34s user 0.94s system 4% cpu 33.961 total
 8
 9# GNU time (sh)
100.34user 0.94system 0:33.96elapsed 4%CPU (0avgtext+0avgdata 6060maxresident)k
110inputs+201456outputs (0major+315minor)pagefaults 0swaps

real 或者 total 或者 elapsed(掛鐘時間)是指從調用開始到結束的時間。它是指從你按下回車鍵的那一刻開始,到命令完成的那一刻爲止的時間。 user - 在用戶模式下花費的CPU時間。 system 或 sys - 在內核模式下花費的CPU時間。

軟件包

接下來的部分是關於 time 軟件包提供的 /usr/bin/time 二進制可執行程序,而不是 shell 內建的 time 命令。

軟件包的語法

一些 shells(例如 bash )有一個內置的 time 命令,提供類似的關於時間和可能的其他資源的使用信息。

要訪問真正的命令,可能需要指定其路徑名(類似於/usr/bin/time)。

1time [options] command [arguments...]

軟件包指令參數

-f format, --format=format 指定輸出格式,可能覆蓋環境變量TIME中指定的格式。 -p, --portability 使用可移植的輸出格式。 -o file, --output=file 不將結果發送到stderr,而是覆蓋指定的文件。 -a, --append (與-o一起使用。)不覆蓋而是附加。 -v, --verbose 對程序知道的所有信息進行非常詳細的輸出。 -q, --quiet 不報告異常的程序終止(當命令被信號終止時)或非零退出狀態。

軟件包實例

使用-o選項將執行時間寫入到文件中:

1/usr/bin/time -o outfile.txt ls

使用-a選項追加信息:

1/usr/bin/time -a -o outfile.txt ls

使用-f選項格式化時間輸出:

1/usr/bin/time -f "time: %U" ls

-f選項後的參數:

參數 描述
%E real時間,顯示格式爲[小時:]分鐘:秒
%U user時間。
%S sys時間。
%C 進行計時的命令名稱和命令行參數。
%D 進程非共享數據區域,以KB爲單位。
%x 命令退出狀態。
%k 進程接收到的信號數量。
%w 進程被交換出主存的次數。
%Z 系統的頁面大小,這是一個系統常量,不用系統中常量值也不同。
%P 進程所獲取的CPU時間百分百,這個值等於 user+system 時間除以總共的運行時間。
%K 進程的平均總內存使用量(data+stack+text),單位是 KB
%w 進程主動進行上下文切換的次數,例如等待I/O操作完成。
%c 進程被迫進行上下文切換的次數(由於時間片到期)。

參考資料

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: