国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

進程控制之進程時間

2024-06-28 13:28:32
字體:
來源:轉載
供稿:網友
進程控制之進程時間

任一進程都可調用times函數以獲得它自己及已終止子進程的墻上時鐘時間、用戶CPU時間和系統CPU時間(關于這三種時間的含義可參考:http://www.CUOXin.com/nufangrensheng/p/3495526.html)。

#include <sys/times.h>clock_t times( struct tms *buf );返回值:若成功則返回流逝的墻上時鐘時間(單位:時鐘滴答數),若出錯則返回-1

此函數填寫由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或waitid已等待到的各個子進程的值。

所有由此函數返回的clock_t值都用_SC_CLK_TCK(由sysconf函數返回的每秒鐘滴答數)變換成秒數。

#include "apue.h"#include <sys/times.h>static void PR_times(clock_t, struct tms *, struct tms *);static void do_cmd(char *);int main(int argc, char *argv[]){    int     i;        setbuf(stdout, NULL);    for(i=1; i<argc; i++)    {        do_cmd(argv[i]);    /* once for each command-line arg */    }    exit(0);}static voiddo_cmd(char *cmd)    /* execute and time the "cmd" */{    struct tms tmsstart, tmsend;    clock_t    start, end;    int     status;    printf("/ncommand: %s/n", cmd);    if((start = times(&tmsstart)) == -1)    /* starting values */        err_sys("times error");    if((status = system(cmd)) < 0)    /* execute command */        err_sys("system error");    if((end = times(&tmsend)) == -1)    /* ending values */        err_sys("times error");    pr_times(end-start, &tmsstart, &tmsend);    pr_exit(status);}static voidpr_times(clock_t real, struct tms *tmsstart, struct tms *tmsend){    static long    clktck = 0;        if(clktck ==0)    /* fetch clock ticks per second first time */        if((clktck = sysconf(_SC_CLK_TCK)) < 0)            err_sys("sysconf error");    printf("  real:    %7.2f/n", real / (double)clktck);    printf("  user:    %7.2f/n",         (tmsend->tms_utime - tmsstart->tms_utime) / (double)clktck);    printf("  sys:    %7.2f/n",         (tmsend->tms_stime - tmsstart->tms_stime) / (double)clktck);    printf("  child user:    %7.2f/n",         (tmsend->tms_cutime - tmsstart->tms_cutime) / (double)clktck);    printf("  child sys:    %7.2f/n",         (tmsend->tms_cstime - tmsstart->tms_cstime) / (double)clktck);}

運行此程序得到:

未命名

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洱源县| 宝丰县| 资阳市| 黎平县| 枣庄市| 普兰店市| 道真| 乌拉特后旗| 广水市| 承德市| 航空| 聂拉木县| 贵港市| 城固县| 无为县| 九江市| 碌曲县| 远安县| 米泉市| 江西省| 盐边县| 新疆| 瑞安市| 怀安县| 阿拉善右旗| 巴林右旗| 湘阴县| 阆中市| 胶南市| 渝北区| 长沙市| 临沂市| 开化县| 宝丰县| 南和县| 灵川县| 北碚区| 德庆县| 玉山县| 沂源县| 柳林县|