acct 中文man页面

系统
如果在内核编译时开启了进程记账选项(CONFIG_BSD_PROCESS_ACCT),则可以通过调用acct(2) 来开始进程记账。

名字

acct - 进程记账文件

概要

#include <sys/acct.h>

描述

如果在内核编译时开启了进程记账选项(CONFIG_BSD_PROCESS_ACCT),则可以通过调用acct(2) 来开始进程记账。如:

acct("/var/log/pacct");

在进程记账开启之后,每当系统内有进程终止内核将写一个记录到记账文件。这个记录包含已经终止进程的信息,它定义在头文件 <sys/acct.h>

#define ACCT_COMM 16

typedef u_int16_t comp_t;

struct acct {
char ac_flag; /* 记账标记 */
u_int16_t ac_uid; /* 记账用户 ID */
u_int16_t ac_gid; /* 记账组 ID */
u_int16_t ac_tty; /* 控制终端 */
u_int32_t ac_btime; /* 进程创建时间
(从开机起的秒数) */
comp_t ac_utime; /* 用户 CPU 时间 */
comp_t ac_stime; /* 系统 CPU 时间 */
comp_t ac_etime; /* 流失的时间 */
comp_t ac_mem; /* 平均内存用量 (kB) */
comp_t ac_io; /* Characters transferred (未使用) */
comp_t ac_rw; /* 读写的块 (未使用) */
comp_t ac_minflt; /* Minor page faults */
comp_t ac_majflt; /* Major page faults */
comp_t ac_swaps; /* Number of swaps (unused) */
u_int32_t ac_exitcode; /* 进程终止状态
(参看 wait(2)) */
char ac_comm[ACCT_COMM+1];
/* 命令名 (执行文件名;以0结尾) */
char ac_pad[X]; /* 填充字节 */
};

enum { /* 在 ac_flag 域可以设置的位 */
AFORK = 0x01, /* 调用 fork 之后,但还没有调用 exec */
ASU = 0x02, /* 使用超级用户权限 */
ACORE = 0x08, /* 核心转储 */
AXSIG = 0x10 /* 由信号杀死 */
};

这里的 comp_t 数据类型是一个浮点值,是由以 8 为底的 3 位指数和 13 位尾数构成。一个这个类型的值 c 可以通过下面的公式转换为一个(长)整型:

    v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3);

ac_utimeac_stimeac_etime 的时间测量单位是时钟嘀嗒,把这个值除以 sysconf(_SC_CLK_TCK) 转换为秒数。

记账文件格式版本 3

从内核版本 2.6.8 开始,一个记账文件的改善版本可以在编译内核时指定 CONFIG_BSD_PROCESS_ACCT_V3 来启用,当设置这个选项之后,记账文件里包含额外的域,并且 c_uidac_gid 域的宽度从 16 位增加到 32 位(在 2.4 内核之后 UID 和 GID 宽度增加了)。这个新的记录结构如下:

struct acct_v3 {
char ac_flag; /* Flags */
char ac_version; /* 总是设置为 ACCT_VERSION (3) */
u_int16_t ac_tty; /* 控制终端 */
u_int32_t ac_exitcode; /* 进程终止状态 */
u_int32_t ac_uid; /* 真实用户 ID */
u_int32_t ac_gid; /* 真实组 ID */
u_int32_t ac_pid; /* 进程 ID */
u_int32_t ac_ppid; /* 父进程 ID */
u_int32_t ac_btime; /* 进程创建时间 */
float ac_etime; /* 流失的埋单 */
comp_t ac_utime; /* 用户 CPU 时间 */
comp_t ac_stime; /* 系统时间 */
comp_t ac_mem; /* 平均内存使用量 (kB) */
comp_t ac_io; /* 传输的字符数量 (未使用) */
comp_t ac_rw; /* 读写的块数
(未使用) */
comp_t ac_minflt; /* 次页异常 */
comp_t ac_majflt; /* 主页异常 */
comp_t ac_swaps; /* 交换的次数 (未使用) */
char ac_comm[ACCT_COMM]; /* 命令名 */
};

版本

acct_v3 结构体在 glibc 2.6 之后定义。

遵循于

进程记账最初出现在 BSD,现在则在大多数系统存在。它是一个没有标准化的特性,并且在系统之间存在许多细节的不同。

注意

记账文件里记录以进程终止的时间顺序排列。

包括 2.6.9 在内或之后的内核,当使用 NPTL 线程库时,当一个线程被创建时会添加一个分隔记账记录;当整个进程的最后一个线程终止时,从 2.6.10 一个单独记账记录会写入。

proc/sys/kernel/acct 文件在 proc(5) 里描述,它定义当磁盘空间不足时如何控制进程记账行为。

参看

lastcomm(1), acct(2), accton(8), sa(8)

#p#

NAME

acct - execution accounting file  

SYNOPSIS

#include <sys/acct.h>  

DESCRIPTION

If the kernel was compiled with the process accounting option enabled, the system call

acct("/somewhere/accountingfile");

will start the process accounting. Each time a process terminates a record for this process is appended to the accounting file. The accounting structure struct acct is also described in the file /usr/include/linux/acct.h.  

SEE ALSO

sa(1), acct(2)

责任编辑:韩亚珊 来源: 博客转载
相关推荐

2011-08-15 10:21:09

man中文man

2011-08-24 16:48:36

man中文man

2011-08-11 16:11:49

at中文man

2011-08-25 10:21:56

man.conf中文man

2011-08-12 14:58:05

killall中文man

2011-07-15 16:58:36

ac中文man

2011-08-15 11:10:48

more中文man

2011-08-25 17:03:51

pclose中文man

2011-08-15 14:10:37

tar中文man

2011-08-16 10:42:30

rmmod中文man

2011-08-11 17:46:02

chmod中文man

2011-08-23 17:49:36

zdump中文man

2011-08-15 15:10:49

wall中文man

2011-08-23 15:06:03

quotastats中文man

2011-08-15 17:35:50

ar中文man

2011-08-25 09:07:16

suffixes中文man

2011-08-25 17:53:26

stdio中文man

2011-08-18 15:21:37

autofs中文man

2011-08-16 09:22:46

df中文man

2011-08-25 15:19:39

dirname中文man
点赞
收藏

51CTO技术栈公众号