Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all
名前
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 プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。