Linux下time命令可以獲取到一個程序的執行時間,包括程序的實際運行時間(real time),以及程序運行在用戶態的時間(user time)和內核態的時間(sys time)。
它的使用方法和前面講過的strace類似,在待執行的命令前加上time即可。
來看一個例子程序test.c
#include
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命令來統計它的執行時間:
[leconte@localhost test]$ time ./test
real 0m0.020s
user 0m0.000s
sys 0m0.018s
結果表明,程序實際運行時間0.020s,用戶態運行時間接近0s,內核態運行時間0.018s。這是因爲我們主要操作是使用文件相關的系統調用,程序大部分時間工作在內核態。
需要注意的是,real並不等於user+sys的總和。real代表的是程序從開始到結束的全部時間,即使程序不佔CPU也統計時間。而user+sys是程序佔用CPU的總時間,因此real總是大於或者等於user+sys的。
例如我在上述程序中加上sleep(1):
for(i=0;i<3;++i)
{
sleep(1);
fprintf(fp,"%d/n",i);
}
用time統計結果如下:
[leconte@localhost test]$ time ./test
real 0m3.025s
user 0m0.000s
sys 0m0.019s
由於執行了三次 sleep(1),real的時間比剛纔多了3s,這3s內程序並沒有佔用CPU,因此user+sys並沒有變化。