进程控制之进程会计

大多数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值

 

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

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

 

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。