电子产业一站式赋能平台

PCB联盟网

搜索
查看: 105|回复: 0
收起左侧

嵌入式Linux:获取进程时间

[复制链接]

679

主题

679

帖子

2524

积分

三级会员

Rank: 3Rank: 3

积分
2524
发表于 2024-7-25 12:43:00 | 显示全部楼层 |阅读模式

ykqcvbsnjdv64016053.gif

ykqcvbsnjdv64016053.gif

点击上方蓝色字体,关注我们
进程时间是指进程从创建到当前时刻所使用的CPU资源的总时间。为了记录和分析,内核将CPU时间(进程时间)分为以下两个部分:
  • 用户CPU时间:进程在用户空间(用户态)运行时所花费的CPU时间。有时也称为虚拟时间(virtual time)。
  • 系统CPU时间:进程在内核空间(内核态)运行时所花费的CPU时间。这是内核执行系统调用或代表进程执行其他任务(例如,处理页错误)所花费的时间。

    通常,进程时间是指用户CPU时间和系统CPU时间的总和,即进程使用的总CPU时间。

    提示:进程时间不等于程序的整个生命周期所消耗的时间。如果进程处于休眠状态(进程被挂起,不会得到系统调度),它不会使用CPU资源,因此休眠时间不计入进程时间。

    在Linux系统中,获取进程时间的两种常用方法是使用times函数和clock函数。这些函数允许程序获取进程的CPU时间,以进行性能分析和优化。


    times 函数
  • 用于获取进程及其子进程的用户和系统CPU时间。
  • 返回从系统启动到调用时的时钟滴答数。
  • struct tms 结构用于存储具体时间信息。


    clock 函数
  • 用于获取程序的用户和系统CPU时间。
  • 返回从程序启动到调用时的时钟滴答数。
  • 通过将返回值除以CLOCKS_PER_SEC可以得到秒数。

    1
    times函数
    times函数用于获取当前进程及其子进程的CPU时间。

    函数原型如下:
  • #include  clock_t times(struct tms *buf);
    参数
  • buf:指向struct tms结构的指针,用于存储进程时间信息。


    返回值
  • 返回从系统启动到调用times函数时的时钟滴答数(clock ticks)。
  • 失败时返回(clock_t)-1,并设置errno来指示错误。


    struct tms 结构
  • struct tms {    clock_t tms_utime;  /* 用户CPU时间 */    clock_t tms_stime;  /* 系统CPU时间 */    clock_t tms_cutime; /* 已终止的子进程的用户CPU时间 */    clock_t tms_cstime; /* 已终止的子进程的系统CPU时间 */};
    示例如下:
  • #include #include #include 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 seconds
    ", (double)t.tms_utime / ticks_per_second);    printf("System time: %lf seconds
    ", (double)t.tms_stime / ticks_per_second);    printf("Child user time: %lf seconds
    ", (double)t.tms_cutime / ticks_per_second);    printf("Child system time: %lf seconds
    ", (double)t.tms_cstime / ticks_per_second);     return 0;}
    2
    clock函数
    clock函数用于获取程序的用户CPU时间。

    函数原型如下:
  • #include  clock_t clock(void);

    返回值
  • 返回程序使用的用户和系统CPU时间的时钟滴答数(clock ticks)。
  • 失败时返回(clock_t)-1,并设置errno来指示错误。

    示例如下:
  • #include #include  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 seconds
    ", cpu_time_used);     return 0;}

    这两个函数在进行程序性能分析和调试时非常有用,可以帮助开发者了解程序的CPU时间消耗情况。

    5dork04pvc364016153.jpg

    5dork04pvc364016153.jpg

    gael2uw55m464016253.gif

    gael2uw55m464016253.gif

    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表