日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

time命令详情

發(fā)布時間:2025/3/17 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 time命令详情 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

基礎(chǔ)命令學(xué)習(xí)目錄首頁

?

原文鏈接:https://blog.csdn.net/adaptiver/article/details/6596143?utm_source=blogxgwz3

linux下time命令可以獲取到一個程序的執(zhí)行時間,包括程序的實際運行時間(real time),以及程序運行在用戶態(tài)的時間(user time)和內(nèi)核態(tài)的時間(sys time)。

它的使用方法和前面講過的strace類似,在待執(zhí)行的命令前加上time即可。

來看一個例子程序test.c

#include <stdio.h> int main() { FILE *fp = fopen("/tmp/testfile","w"); int i=0; for(i=0;i<3;++i) { fprintf(fp,"%d\n",i); } fclose(fp); return 0; }

編譯后用time命令來統(tǒng)計它的執(zhí)行時間:

[leconte@localhost test]$ time ./test real 0m0.020s user 0m0.000s sys 0m0.018s

結(jié)果表明,程序?qū)嶋H運行時間0.020s,用戶態(tài)運行時間接近0s,內(nèi)核態(tài)運行時間0.018s。這是因為我們主要操作是使用文件相關(guān)的系統(tǒng)調(diào)用,程序大部分時間工作在內(nèi)核態(tài)。

需要注意的是,real并不等于user+sys的總和。real代表的是程序從開始到結(jié)束的全部時間,即使程序不占CPU也統(tǒng)計時間。而user+sys是程序占用CPU的總時間,因此real總是大于或者等于user+sys的。

例如我在上述程序中加上sleep(1):

for(i=0;i<3;++i) { sleep(1); fprintf(fp,"%d\n",i); }

用time統(tǒng)計結(jié)果如下:

[leconte@localhost test]$ time ./test real 0m3.025s user 0m0.000s sys 0m0.019s

由于執(zhí)行了三次 sleep(1),real的時間比剛才多了3s,這3s內(nèi)程序并沒有占用CPU,因此user+sys并沒有變化

?

?

【命令】time — 執(zhí)行命令并計時

【格式】time [-p] command [arguments...]

【說明】

執(zhí)行命令行"command [arguments...]",命令行執(zhí)行結(jié)束時在標(biāo)準(zhǔn)輸出中打印執(zhí)行該命令行的時間統(tǒng)計結(jié)果,其統(tǒng)計結(jié)果包含以下數(shù)據(jù):

1)實際時間(real time): 從command命令行開始執(zhí)行到運行終止的消逝時間;

2)用戶CPU時間(user CPU time): 命令執(zhí)行完成花費的用戶CPU時間,即命令在用戶態(tài)中執(zhí)行時間總和;

3)系統(tǒng)CPU時間(system CPU time): 命令執(zhí)行完成花費的系統(tǒng)CPU時間,即命令在核心態(tài)中執(zhí)行時間總和。

其中,用戶CPU時間和系統(tǒng)CPU時間之和為CPU時間,即命令占用CPU執(zhí)行的時間總和。實際時間要大于CPU時間,因為Linux是多任務(wù)操作系統(tǒng),往往在執(zhí)行一條命令時,系統(tǒng)還要處理其它任務(wù)。

另一個需要注意的問題是即使每次執(zhí)行相同命令,但所花費的時間也是不一樣,其花費時間是與系統(tǒng)運行相關(guān)的。

例1:

?????????? ?1. # time date
????????????2. Sun Mar 26 22:45:34 GMT-8 2006
????????????3.?
????????????4. real??? 0m0.136s
????????????5. user??? 0m0.010s
????????????6. sys???? 0m0.070s
????????????7. #

在例1中,執(zhí)行命令"time date"(見第1行)。系統(tǒng)先執(zhí)行命令"date",第2行為命令"date"的執(zhí)行結(jié)果。第3-6行為執(zhí)行命令"date"的時間統(tǒng)計結(jié)果,其中第4行"real"為實際時間,第5行"user"為用戶CPU時間,第6行"sys"為系統(tǒng)CPU時間。以上三種時間的顯示格式均為MMmNN[.FFF]s。

在例1中,CPU時間 = 用戶CPU時間 + 系統(tǒng)CPU時間 = 0m0.010s + 0m0.070s = 0m0.080s,實際時間大于CPU時間,說明在date命令運行的同時,還有其它任務(wù)在運行。

【參數(shù)說明】

-p 以POSIX缺省的時間格式打印時間統(tǒng)計結(jié)果,單位為秒。詳細(xì)的輸出格式見例2。

例2:

??????????? 1. # time -p date
????????????2. Wed Mar 27 00:33:11 GMT-8 2006
????????????3. real 0.11
????????????4. user 0.00
????????????5. sys 0.02
????????????6. #

在例2中,同樣執(zhí)行命令"time date"(見第1行)。系統(tǒng)先執(zhí)行命令 "date",第2行為該命令的執(zhí)行結(jié)果。第3-5行為執(zhí)行命令"date"的時間統(tǒng)計結(jié)果。注意本例的時間格式與例1中的時間格式差別,使用-p 參數(shù)后的時間顯示格式為NN.FF,其單位為秒。

【相關(guān)環(huán)境變量說明】

TIMEFORMAT 自定義輸出的時間格式。

我們也可以通過環(huán)境變量TIMEFORMAT來自定義輸出的時間格式[1]。格式中使用和標(biāo)準(zhǔn)C中的函數(shù)printf一致的轉(zhuǎn)義符,以及使用以下的轉(zhuǎn)義序列來指定輸出的時間格式:

%[prec][l][RUS]

其中,選項prec為指定時間精度,即小數(shù)點后面的位數(shù);選項l表示使用分秒(具體格式為:MMmNN[.FFF]s)的格式;最后一個字符表示時間的類型,其中R表示實際時間,U表示用戶CPU時間,S表示系統(tǒng)CPU 時間,它們的單位均為秒。

time命令缺省輸出的時間格式同 TIMEFORMAT=$'/nreal/t%3lR/nuser/t%3lU/nsys/t%3lS'。

使用-p參數(shù)的time命令輸出的時間格式同 TIMEFORMAT=$'real %2R/nuser %2U/nsys %2S'。

例3:

????????????1. # export TIMEFORMAT=$'real %2R/nuser %2U/nsys %2S'
????????????2. # time date
????????????3. Wed Mar 27 00:52:03 GMT-8 2006
????????????4. real 0.04
????????????5. user 0.00
????????????6. sys 0.01
????????????7. #

比較例2和例3顯示結(jié)果,很容易發(fā)現(xiàn)例3雖然沒有使用參數(shù)-p,但其輸出的結(jié)果和例2一模一樣。

當(dāng)然,我們也可以修改為任何自己喜歡的時間格式。

例4:

????????????1. # export TIMEFORMAT=$'/nHello, ThinkerABC!/nreal time :?????? %lR/nuser CUP time :?? %lU/nsystem CPU time : %lS'
????????????2. # time date
????????????3. Wed Mar 27 01:09:26 GMT-8 2006
????????????4.
????????????5. Hello, ThinkerABC!
????????????6. real time :?????? 0m0.016s
????????????7. user CUP time :?? 0m0.006s
????????????8. system CPU time : 0m0.008s
????????????9. #

例4的第4-8行正是我們自定義的輸出格式。

從以上介紹了三種指定時間格式的方法,即缺省的時間格式、使用參數(shù)-p的POSIX缺省的時間格式和設(shè)定環(huán)境變量TIMEFORMAT自定義的時間格式,Linux系統(tǒng)使用的先后順序如下:

1.參數(shù)-p的POSIX缺省時間格式;

2.環(huán)境變量TIMEFORMAT自定義的時間格式;

3.缺省的時間格式。

【退出狀態(tài)說明】

如果能執(zhí)行command命令,則返回該命令的退出狀態(tài),否則返回如下的退出狀態(tài)值:

127 命令未找到

126 命令找到,但不能執(zhí)行

1-125 其它錯誤

?

?

譯至:http://unicus.jp/skmk/archives/338

由于輸出 time 命令的結(jié)果到文件時使用的錯誤的方式,所以將其記錄下來。

環(huán)境是bash。

目標(biāo)

將運行的a.out程序的輸出和其所花的時間重定向到日志文件中

無效的例子1


time ./a.out > logfile time ./a.out | tee logfile


上面的例子是重定向結(jié)果到logfile,下面的例子是通過tee把標(biāo)準(zhǔn)輸出輸出到文件。?
但是只有time的輸出沒有被記錄到文件中。

? ? 這是因為time的結(jié)果是通過標(biāo)準(zhǔn)錯誤輸出的。

所以不把標(biāo)準(zhǔn)錯誤輸出重定向到文件中是不行的。

無效的例子2

把錯誤輸出也重定向到文件。

?

time ./a.out >& logfile time ./a.out > logfile 2>&1 time ./a.out 2>&1 | tee logfile

然而,這也是沒有用的。

./a.out >& logfile ./a.out > logfile 2>&1 ./a.out 2>&1 | tee logfile

因為這只是意味著把a(bǔ).out的錯誤和標(biāo)準(zhǔn)輸出重定向到logfile。

?

OK的例子

我們是想把 time ./a.out 的結(jié)果輸出到logfile,所以: (time ./a.out) >& logfile (time ./a.out) > logfile 2&>1 (time ./a.out) 2>&1 | tee logfile

用括號括起來。這樣就搞定了。換句話說,你是在一個子shell中運行。

另外最新的bash不僅支持>&也支持&>。

?

也可以用{;} 指定一組命令。

{ time ./a.out ; } >& logfile { time ./a.out ; } > logfile 2&1 { time ./a.out ; } 2>&1 | tee logfile

{ 后一定要加空格,如果沒有的話,會報錯 -bash: syntax error near unexpected token `}’ 。后面的冒號;也不要忘了。

?

/usr/bin/time

順便說一下,bash內(nèi)置的命令time和GNU的time命令是不一樣的。通過追加完整的路徑/usr/bin/time?可以執(zhí)行GNU命令。
但是和內(nèi)置的bash不同的是,不加括號也可以將所有的輸出重定向到文件。當(dāng)然加括號也沒問題。

/usr/bin/time ./a.out >& logfile /usr/bin/time ./a.out > logfile 2>&1 /usr/bin/time ./a.out 2>&1 | tee logfile

而且有輸出到文件的選項-o。

/usr/bin/time -o logfile ./a.out 但是這只會把time的結(jié)果寫到文件。使用追加選項-a就可以了。 /usr/bin/time -a -o logfile ./a.out > logfile GNU的time命令跟bash的time比的話,數(shù)據(jù)更詳細(xì),也能指定多種輸出格式。 詳細(xì)的情況請使用man time,bash的time的話使用help time。 原文鏈接:https://blog.csdn.net/robertsong2004/article/details/38655389

?

轉(zhuǎn)載于:https://www.cnblogs.com/machangwei-8/p/10355241.html

總結(jié)

以上是生活随笔為你收集整理的time命令详情的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。