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