<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 嵌入式Linux:獲取進(jìn)程時(shí)間

嵌入式Linux:獲取進(jìn)程時(shí)間

發(fā)布人:美男子玩編程 時(shí)間:2024-08-22 來(lái)源:工程師 發(fā)布文章

進(jìn)程時(shí)間是指進(jìn)程從創(chuàng )建到當前時(shí)刻所使用的CPU資源的總時(shí)間。為了記錄和分析,內核將CPU時(shí)間(進(jìn)程時(shí)間)分為以下兩個(gè)部分:

  • 用戶(hù)CPU時(shí)間:進(jìn)程在用戶(hù)空間(用戶(hù)態(tài))運行時(shí)所花費的CPU時(shí)間。有時(shí)也稱(chēng)為虛擬時(shí)間(virtual time)。

  • 系統CPU時(shí)間:進(jìn)程在內核空間(內核態(tài))運行時(shí)所花費的CPU時(shí)間。這是內核執行系統調用或代表進(jìn)程執行其他任務(wù)(例如,處理頁(yè)錯誤)所花費的時(shí)間。

通常,進(jìn)程時(shí)間是指用戶(hù)CPU時(shí)間和系統CPU時(shí)間的總和,即進(jìn)程使用的總CPU時(shí)間。

提示:進(jìn)程時(shí)間不等于程序的整個(gè)生命周期所消耗的時(shí)間。如果進(jìn)程處于休眠狀態(tài)(進(jìn)程被掛起,不會(huì )得到系統調度),它不會(huì )使用CPU資源,因此休眠時(shí)間不計入進(jìn)程時(shí)間。

在Linux系統中,獲取進(jìn)程時(shí)間的兩種常用方法是使用times函數和clock函數。這些函數允許程序獲取進(jìn)程的CPU時(shí)間,以進(jìn)行性能分析和優(yōu)化。

times 函數:

  • 用于獲取進(jìn)程及其子進(jìn)程的用戶(hù)和系統CPU時(shí)間。

  • 返回從系統啟動(dòng)到調用時(shí)的時(shí)鐘滴答數。

  • struct tms 結構用于存儲具體時(shí)間信息。

clock 函數:

  • 用于獲取程序的用戶(hù)和系統CPU時(shí)間。

  • 返回從程序啟動(dòng)到調用時(shí)的時(shí)鐘滴答數。

  • 通過(guò)將返回值除以CLOCKS_PER_SEC可以得到秒數。

1

times函數

times函數用于獲取當前進(jìn)程及其子進(jìn)程的CPU時(shí)間。

函數原型如下:




#include <sys/times.h> clock_t times(struct tms *buf);

參數:

  • buf:指向struct tms結構的指針,用于存儲進(jìn)程時(shí)間信息。

返回值:

  • 返回從系統啟動(dòng)到調用times函數時(shí)的時(shí)鐘滴答數(clock ticks)。

  • 失敗時(shí)返回(clock_t)-1,并設置errno來(lái)指示錯誤。

struct tms 結構:


struct tms {    clock_t tms_utime;  /* 用戶(hù)CPU時(shí)間 */    clock_t tms_stime;  /* 系統CPU時(shí)間 */    clock_t tms_cutime; /* 已終止的子進(jìn)程的用戶(hù)CPU時(shí)間 */    clock_t tms_cstime; /* 已終止的子進(jìn)程的系統CPU時(shí)間 */};

示例如下:

































#include <stdio.h>#include <sys/times.h>#include <unistd.h> int main() {    struct tms t;    clock_t start, end;     start = times(&t);    if (start == (clock_t)-1) {        perror("times");        return 1;    }     // 模擬一些工作負載    for (volatile int i = 0; i < 100000000; i++);     end = times(&t);    if (end == (clock_t)-1) {        perror("times");        return 1;    }     long ticks_per_second = sysconf(_SC_CLK_TCK);     printf("User time: %lf secondsn", (double)t.tms_utime / ticks_per_second);    printf("System time: %lf secondsn", (double)t.tms_stime / ticks_per_second);    printf("Child user time: %lf secondsn", (double)t.tms_cutime / ticks_per_second);    printf("Child system time: %lf secondsn", (double)t.tms_cstime / ticks_per_second);     return 0;}

2

clock函數

clock函數用于獲取程序的用戶(hù)CPU時(shí)間。

函數原型如下:




#include <time.h> clock_t clock(void);

返回值:

  • 返回程序使用的用戶(hù)和系統CPU時(shí)間的時(shí)鐘滴答數(clock ticks)。

  • 失敗時(shí)返回(clock_t)-1,并設置errno來(lái)指示錯誤。

示例如下:





























#include <stdio.h>#include <time.h> int main() {    clock_t start, end;    double cpu_time_used;     start = clock();    if (start == (clock_t)-1) {        perror("clock");        return 1;    }     // 模擬一些工作負載    for (volatile int i = 0; i < 100000000; i++);     end = clock();    if (end == (clock_t)-1) {        perror("clock");        return 1;    }     cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;     printf("CPU time used: %f secondsn", cpu_time_used);     return 0;}

這兩個(gè)函數在進(jìn)行程序性能分析和調試時(shí)非常有用,可以幫助開(kāi)發(fā)者了解程序的CPU時(shí)間消耗情況。

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 嵌入式 Linux

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>