测量 linux 上 exec()-ed 进程所花费的时间

Posted

技术标签:

【中文标题】测量 linux 上 exec()-ed 进程所花费的时间【英文标题】:Measuring time taken by an exec()-ed process on linux 【发布时间】:2009-07-02 19:56:17 【问题描述】:

我正在使用 times() 函数来测量值,但我不确定我的方法是否正确。请看看和建议

struct tms tms_start, tms_end;
if (!(pid=fork()))

    //some necessary operations here
    times(&tms_start);
    execl(...);

else if (pid)

    //in parent
    int status;
    wait(&status);
    times(&tms_end);
    if (WIFEXITED(status))
    
        if(WEXITSTATUS(status)==0)
        
            clock_t real = tms_end.tms_cstime - tms_start.tms_stime
            float running_time = real/(double)sysconf(_SC_CLK_TK);
        
    

【问题讨论】:

【参考方案1】:

您需要先致电times(&tms_start),然后再致电fork()。在上面的代码中,tms_start 变量在父级中未初始化,因为父级从不调用 times(&tms_start)

struct tms tms_start, tms_end;
times(&tms_start);             // <-- here
if (!(pid=fork()))

    //some necessary operations here
    execl(...);

else if (pid)

    ...

【讨论】:

啊,我明白了。所以我猜这个差异计算是正确的吗? clock_t real = tms_end.tms_cstime - tms_start.tms_stime 如果你想测量内核代表子进程所花费的时间,那么你的表达是正确的。但是,如果(更有可能)您想测量进程本身占用的 CPU 时间,则使用 tms_cutime 和 tms_utime。或者,如果您想测量实际的挂钟时间,请不要使用 times(),而是使用 time() 或 gettimeofday()。 停在哪里?

以上是关于测量 linux 上 exec()-ed 进程所花费的时间的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统编程之程序的执行(exec函数族)

linux的子进程调用exec( )系列函数

Linux系统编程——进程替换:exec 函数族

Linux系统编程——进程替换:exec 函数族

Linux系统编程——进程替换:exec 函数族

Linux下Fork与Exec使用