• 进程控制之进程会计


    大多数UNIX系统提供了一个选项以进行进程会计(process accounting)处理。启用该选项后,每当进程结束时内核就写一个会计记录。典型的会计记录包含总量较小的二进制数据,一般包括命令名、所使用的CPU时间总量、用户ID和组ID、启动时间等。

    函数(acct)用于启用和禁用进程会计。唯一使用这一函数的命令是accton(8)命令。超级用户(系统管理员)执行一个带路径名参数(如:/var/account/pacct)的accton命令启动会计处理。会计记录写到由带路径名参数指定的文件中,在Linux中,该文件是/var/account/pacct。执行不带任何参数的accton命令可停止会计处理

    会计记录结构定义在头文件<sys/acct.h>中(Linux中,该头文件在/usr/include目录下),其形式如下:

    typedef    u_short    comp_t;    /* 3-bit base 8 exponent; 13-bit fraction */
    
    struct acct
    {
        char    ac_flag;        /* flag */
        char    ac_stat;        /* termination status (signal & core flag only) */
                                /* (Solaris only) */
        uid_t    ac_uid;        /* real user ID */
        gid_t    ac_gid;        /* real group ID */
        dev_t    ac_tty;        /* controlling terminal */
        time_t   ac_btime;      /* starting calendar time */
        comp_t   ac_utime;      /* user CPU time (clock ticks) */
        comp_t   ac_stime;      /* system CPU time (clock ticks) */
        comp_t   ac_etime;      /* elapsed time (clock ticks) */
        comp_t   ac_mem;        /* average memory usage */
        comp_t   ac_io;         /* bytes transferred (by read and write) */
                                /* "blocks" on BSD system */
        comp_t   ac_rw;         /* blocks read or written */
                                /* (not present on BSD system) */
        char     ac_comm[8];    /* command name: [8] for Solaris, */
                                /* [10] for Mac OS X, [16] for FreeBSD, and */
                                /* [17] for Linux */
        
    };

    其中,ac_flag成员记录了进程执行期间的某些事件。这些事件见表8-8。

                                                              表8-8 会计记录中的ac_flag值

    081104212006 

    会计记录所需的各种数据(如CPU时间、传输的字符数)都由内核保存在进程表中,并在一个新进程被创建时置初值(例如调用fork之后在子进程中)。每次进程终止时都会编写一条会计记录。

    会计记录对应于进程而不是程序。在fork之后,内核为子进程初始化一个记录,而不是在一个新程序被执行时做这项工作。虽然exec并不创建一个新的会计记录,但改变了相应记录中的命令名,并且AFORK标志会被清除。这意味着,如果一个进程顺序执行了三个程序(A exec B,然后B exec C,最后C exit),但只会写一条会计记录。该记录中的命令名对应于程序C,但CPU时间是程序A、B、C之和。

     

    本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

  • 相关阅读:
    深入解析委托和事件
    一个小型工程报价系统(三层架构)
    DONET三层架构开发初步
    VS项目重命名工具
    Visual Studio 2012 应用软件开发新方式
    Consumer is not subscribed to any topics or assigned any partitions
    kafka的一些常用命令
    横向遍历二叉树
    Flume的断点续传解决
    实际生产用法CMS和G1
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3512628.html
Copyright © 2020-2023  润新知