在類 Unix 系統中,你可能知道一個命令或進程開始執行的時間,以及一個進程運行了多久。 但是,你如何知道這個命令或進程何時結束或者它完成運行所花費的總時長呢? 在類 Unix 系統中,這是非常容易的! 有一個專門爲此設計的程序名叫GNU time。 使用 time 程序,我們可以輕鬆地測量 Linux 操作系統中命令或程序的總執行時間。 time 命令在大多數 Linux 發行版中都有預裝,所以你不必去安裝它。

  在 Linux 中查找一個命令或進程的執行時間

  要測量一個命令或程序的執行時間,運行:

  $ /usr/bin/time -p ls

  或者,

  $ time ls

  輸出樣例:

  dir1 dir2 file1 file2 mcelog real 0m0.007suser 0m0.001ssys 0m0.004s

  $ time ls -a. .bash_logout dir1 file2 mcelog .sudo_as_admin_successful.. .bashrc dir2 .gnupg .profile .wget-hsts.bash_history .cache file1 .local .stack real 0m0.008ssys 0m0.005s

  以上命令顯示出了 ls 命令的總執行時間。 你可以將 ls 替換爲任何命令或進程,以查找總的執行時間。

  輸出詳解:

  1. real —— 指的是命令或程序所花費的總時間

  2. user —— 指的是在用戶模式下程序所花費的時間

  3. sys —— 指的是在內核模式下程序所花費的時間

  我們也可以將命令限制爲僅運行一段時間。參考如下教程瞭解更多細節:

  在 Linux 中如何讓一個命令運行特定的時長

  time 與 /usr/bin/time

  你可能注意到了, 我們在上面的例子中使用了兩個命令 time 和 /usr/bin/time 。 所以,你可能會想知道他們的不同。

  首先, 讓我們使用 type 命令看看 time 命令到底是什麼。對於那些我們不瞭解的 Linux 命令,type 命令用於查找相關命令的信息。 更多詳細信息,請參閱本指南。

  $ type -a timetime is a shell keywordtime is /usr/bin/time

  正如你在上面的輸出中看到的一樣,time 是兩個東西:

  一個是 BASH shell 中內建的關鍵字

  一個是可執行文件,如 /usr/bin/time

  由於 shell 關鍵字的優先級高於可執行文件,當你沒有給出完整路徑只運行 time 命令時,你運行的是 shell 內建的命令。 但是,當你運行 /usr/bin/time 時,你運行的是真正的GNU time命令。 因此,爲了執行真正的命令你可能需要給出完整路徑。

  在大多數 shell 中如 BASH、ZSH、CSH、KSH、TCSH 等,內建的關鍵字 time 是可用的。 time 關鍵字的選項少於該可執行文件,你可以使用的唯一選項是 -p。

  你現在知道了如何使用 time 命令查找給定命令或進程的總執行時間。 想進一步瞭解 GNU time 工具嗎? 繼續閱讀吧!

  關於 GNU time 程序的簡要介紹

  GNU time 程序運行帶有給定參數的命令或程序,並在命令完成後將系統資源使用情況彙總到標準輸出。 與 time 關鍵字不同,GNU time 程序不僅顯示命令或進程的執行時間,還顯示內存、I/O 和 IPC 調用等其他資源。

  time 命令的語法是:

  /usr/bin/time [options] command [arguments...]

  上述語法中的 options 是指一組可以與 time 命令一起使用去執行特定功能的選項。 下面給出了可用的選項:

  -f, –format —— 使用此選項可以根據需求指定輸出格式。

  -p, –portability —— 使用簡要的輸出格式。

  -o file, –output=FILE —— 將輸出寫到指定文件中而不是到標準輸出。

  -a, –append —— 將輸出追加到文件中而不是覆蓋它。

  -v, –verbose —— 此選項顯示 time 命令輸出的詳細信息。

  –quiet – 此選項可以防止 time 命令報告程序的狀態.

  當不帶任何選項使用 GNU time 命令時,你將看到以下輸出。

  $ /usr/bin/time wc /etc/hosts9 28 273 /etc/hosts0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2024maxresident)k0inputs+0outputs (0major+73minor)pagefaults 0swaps

  如果你用 shell 關鍵字 time 運行相同的命令, 輸出會有一點兒不同:

  $ time wc /etc/hosts real 0m0.006s

  有時,你可能希望將系統資源使用情況輸出到文件中而不是終端上。 爲此, 你可以使用 -o 選項,如下所示。

  $ /usr/bin/time -o file.txt lsdir1 dir2 file1 file2 file.txt mcelog

  正如你看到的,time 命令不會顯示到終端上。因爲我們將輸出寫到了file.txt 的文件中。 讓我們看一下這個文件的內容:

  $ cat file.txt0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k0inputs+0outputs (0major+106minor)pagefaults 0swaps

  當你使用 -o 選項時, 如果你沒有一個名爲 file.txt 的文件,它會創建一個並把輸出寫進去。如果文件存在,它會覆蓋文件原來的內容。

  你可以使用 -a 選項將輸出追加到文件後面,而不是覆蓋它的內容。

  $ /usr/bin/time -a file.txt ls

  -f 選項允許用戶根據自己的喜好控制輸出格式。 比如說,以下命令的輸出僅顯示用戶,系統和總時間。

  $ /usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls0:00.00 real, 0.00 user, 0.00 sys

  請注意 shell 中內建的 time 命令並不具有 GNU time 程序的所有功能。

  有關 GNU time 程序的詳細說明可以使用 man 命令來查看。

  $ man time

  想要了解有關 Bash 內建 time 關鍵字的更多信息,請運行:

  $ help time

  就到這裏吧。 希望對你有所幫助。

  會有更多好東西分享哦。 請關注我們!

  加油哦!

  via:https://www.ostechnix.com/how-to-find-the-execution-time-of-a-command-or-process-in-linux/

  作者:SK選題:lujun9972譯者:caixiangyue校對:wxy

  本文由LCTT原創編譯,Linux中國榮譽推出

查看原文 >>
相關文章