名 前
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; /* Accounting flags */
u_int16_t ac_uid; /* Accounting user ID */
u_int16_t ac_gid; /* Accounting group ID */
u_int16_t ac_tty; /* Controlling terminal */
u_int32_t ac_btime; /* Process creation time
(seconds since the Epoch) */
comp_t ac_utime; /* User CPU time */
comp_t ac_stime; /* System CPU time */
comp_t ac_etime; /* Elapsed time */
comp_t ac_mem; /* Average memory usage (kB) */
comp_t ac_io; /* Characters transferred (unused) */
comp_t ac_rw; /* Blocks read or written (unused) */
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; /* Process termination status
(see wait(2)) */
char ac_comm[ACCT_COMM+1];
/* Command name (basename of last
executed command; null−terminated) */
char ac_pad[X]; /* padding bytes */ };
enum { /* Bits
that may be set in ac_flag field */
AFORK = 0x01, /* Has executed fork, but no exec */
ASU = 0x02, /* Used superuser privileges */
ACORE = 0x08, /* Dumped core */
AXSIG = 0x10 /* Killed by a signal */ }; デ ー
タ 型 comp_t は 浮 動
小 数 点 値 で 、 3
ビ ッ ト 幅 の 基
数 が 8 の 指 数 部
と 13 ビ ッ ト 幅 の
仮 数 部 か ら 構
成 さ れ る 。 comp_t
型 の 値 c は 以
下 の よ う に し
て (long 型 の ) 整 数
に 変 換 で き る
。
v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3); フ ィ ー ル ド ac_utime, ac_stime, ac_etime は "clock ticks" 単 位 で 計 測 し た 時 間 で あ る 。 こ れ ら の 値 を sysconf(_SC_CLK_TCK) で 割 る と 、 秒 に 変 換 で き る 。 バ ー ジ ョ ン 3 の ア カ ウ ン テ ィ ン グ フ ァ イ ル の フ ォ ー マ ッ ト カ ー ネ ル 2.6.8 以 降 で は 、 別 の バ ー ジ ョ ン の ア カ ウ ン テ ィ ン グ フ ァ イ ル を 生 成 す る こ と が で き 、 こ れ を 使 う に は カ ー ネ ル 構 築 時 に CONFIG_BSD_PROCESS_ACCT_V3 オ プ シ ョ ン が 有 効 に な っ て い る 必 要 が あ る 。 こ の オ プ シ ョ ン が 設 定 さ れ る と 、 ア カ ウ ン テ ィ ン グ フ ァ イ ル に 書 き 込 ま れ る レ コ ー ド に フ ィ ー ル ド が 追 加 さ れ る 。 ま た 、 フ ィ ー ル ド c_uid と ac_gid の 幅 が 16 ビ ッ ト か ら 32 ビ ッ ト に 拡 張 さ れ る (こ れ は Linux 2.4 以 降 で UID と GID の サ イ ズ が 増 え て い る の に 対 応 し た も の で あ る )。 こ の レ コ ー ド は 以 下 の よ う に 定 義 さ れ て い る 。
struct acct_v3
{
char ac_flag; /* Flags */
char ac_version; /* Always set to ACCT_VERSION (3) */
u_int16_t ac_tty; /* Controlling terminal */
u_int32_t ac_exitcode; /* Process termination status */
u_int32_t ac_uid; /* Real user ID */
u_int32_t ac_gid; /* Real group ID */
u_int32_t ac_pid; /* Process ID */
u_int32_t ac_ppid; /* Parent process ID */
u_int32_t ac_btime; /* Process creation time */
float ac_etime; /* Elapsed time */
comp_t ac_utime; /* User CPU time */
comp_t ac_stime; /* System time */
comp_t ac_mem; /* Average memory usage (kB) */
comp_t ac_io; /* Characters transferred (unused) */
comp_t ac_rw; /* Blocks read or written
(unused) */
comp_t ac_minflt; /* Minor page faults */
comp_t ac_majflt; /* Major page faults */
comp_t ac_swaps; /* Number of swaps (unused) */
char ac_comm[ACCT_COMM]; /* Command name */ };
バ ー ジ ョ ン
acct_v3 構 造 体 は バ ー ジ ョ ン 2.6 以 降 の glibc で 定 義 さ れ て い る 。
準 拠
プ ロ セ ス ア カ ウ ン テ ィ ン グ は BSD 由 来 で あ る 。 こ の 機 能 は ほ と ん ど の シ ス テ ム に 存 在 す る が 、 標 準 化 さ れ て お ら ず 、 そ の 詳 細 は シ ス テ ム に よ り い く ら か 異 な る 。
注 意
ア カ ウ ン テ ィ ン グ フ ァ イ ル の レ コ ー ド は 、 プ ロ セ ス の 終 了 時 刻 の 順 序 と な る 。 バ ー ジ ョ ン 2.6.9 以 前 の カ ー ネ ル で は 、 NPTL ス レ ッ ド ラ イ ブ ラ リ を 使 っ て 作 成 さ れ た ス レ ッ ド で は ス レ ッ ド 毎 に 別 々 の ア カ ウ ン テ ィ ン グ レ コ ー ド が 書 き 込 ま れ て い た 。 Linux 2.6.10 以 降 で は 、 プ ロ セ ス 内 の 最 後 の ス レ ッ ド が 終 了 す る と 、 プ ロ セ ス 全 体 に つ い て の ア カ ウ ン テ ィ ン グ レ コ ー ド が 一 つ だ け 書 き 込 ま れ る 。
proc/sys/kernel/acct フ ァ イ ル (proc(5) で 説 明 さ れ て い る ) は 、 デ ィ ス ク 容 量 の 残 り が 少 な く な っ た 際 の プ ロ セ ス ア カ ウ ン テ ィ ン グ の 動 作 を 制 御 す る 設 定 を 保 持 し て い る 。
関 連 項 目
lastcomm(1), acct(2), accton(8), sa(8)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。