進程環境與進程式控制制(5): 進程時間

來源:互聯網
上載者:User
#include <sys/times.h>
clock_t times(struct tms *buf);

傳回值: 若成功則返迴流逝的牆上時鐘時間, 若出錯返回-1.
所有由此函數返回的clock_t值都用_SC_CLK_TCK變換成秒數.(由sysconf函數返回的每秒時鐘滴答數)
此函數填寫由buf指向的tms結構, 該結構定義如下:

struct tms
...{
    clock_t tms_utime;  /**//* user CPU time */
    clock_t tms_stime;  /**//* system CPU time */
    clock_t tms_cutime; /**//* user CPU time, terminated children */
    clock_t tms_cstime; /**//* system CPU time, terminated children */
};

注意: 此結構沒有包含牆上時鐘是的任何測量值. 作為替代, times函數返回牆上時鐘時間作為函數值. 此值是相對於過去的某一時刻測試的, 所以不能用其絕對值, 而必須使用其相對值.
例如, 調用times, 儲存其傳回值. 在以後某個時間再次調用times, 從新的傳回值中減去以前的傳回值, 此差值就是牆上時鐘時間.
該結構中的後兩個成員是針對子進程的變數, 包含了用wait, waitpid等待到的各個子進程的值.

 

執行個體代碼:

#include <sys/times.h>

static void pr_times(clock_t, struct tms *, struct tms *);
static int do_cmd(char *);

int main()
...{
    int i;
    setbuf(stdout, NULL);
    for (i = 1; i < argc; i++)
        do_cmd(argv[i]);
    
    return 0;
}

static int do_cmd(char *cmd)
...{
    struct tms tmsstart, tmsend;
    clock_t start, end;
    int status;

    printf(" command: %s ", cmd);

    if ((start = times(&tmsstart)) == -1)
        /**//* error handler */

    if ((status == system(cmd)) < 0)
        /**//* error handler */

    if (end = times(&tmsend)) == -1_
        /**//* error handler */

    pr_times(end-start, &tmsstart, &tmsend);

    return status;
}

static void pr_times(clock_t real, struct tms *tmsstart, struct tms *tmsend)
...{
    static long clktck = 0;

    if (clktck == 0)
        if ((clktck = sysconf(_SC_CLK_TCK)) < 0)
            /**//* error hanlder */
    printf(" read: %7.2f ", read / (double)clktck);
    printf(" user: %7.2f ", tmsend->tms_utime - tmsstart->tms_utime) / (double) clktck);
    ...
    ...
}

運行:

$ ./a.out "sleep 5" "date"

command: sleep 5
 real:      5.02
 user:      0.00
 sys:       0.00
 child user:      0.01
 child sys:       0.00

command: date
Fri Jun 22 17:11:20 EST 2007
 real:      0.01
 user:      0.00
 sys:       0.00
 child user:      0.01
 child sys:       0.00

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.