> Linux Reviews > man >

acct


  1. acct.2.man
  2. acct.5.man


1. acct.2.man

Manpage of ACCT

ACCT

Section: Linux Programmer's Manual (2)
Updated: 2008-06-16
Index Return to Main Contents
 

名前

acct - プロセス・アカウントのオンとオフを切り換える  

書式

#include <unistd.h>

int acct(const char *filename);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

acct(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)  

説明

acct() システムコールは、プロセス・アカウントの有効・無効を切り替える。 既存のファイルの名前を引き数に指定して呼び出されたら、 アカウント (account) が有効になり、 終了したプロセスの記録が filename に追記される。 NULL を引き数として呼び出されたらアカウントをオフにする。  

返り値

成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。  

エラー

EACCES
指定したファイルへの書き込み許可がなく、書き込みが拒否された。
EACCES
指定したファイルへの書き込み許可がなく、書き込みが拒否された。 または filename のディレクトリ部分の何れかのディレクトリに検索許可がなく拒否された (path_resolution(7) も参照すること)。 または filename が通常 (regular) のファイルでない。
EFAULT
アクセスできるアドレス空間の外を filename が指している。
EIO
filename への書き込みにエラーが発生した。
EISDIR
filename がディレクトリである。
ELOOP
filename の実体にたどり着くまでのシンボリックリンクの数が多すぎる。
ENAMETOOLONG
filename が長すぎる。
ENFILE
オープンされたファイルの総数がシステム制限に達した。
ENOENT
指定されたファイルが存在しない。
ENOMEM
メモリが足りない。
ENOSYS
カーネルをコンパイルした時に BSD プロセス・アカウントが有効になっていない。 この機能はカーネルのコンフィグの CONFIG_BSD_PROCESS_ACCT パラメータによって制御される。
ENOTDIR
filename の中でディレクトリして扱われている要素が、 実際はディレクトリでない。
EPERM
呼び出したプロセスにはプロセス・アカウントを有効にするのに十分な特権がない。 Linux では CAP_SYS_PACCT ケーパビリティ (capability) が必要である。
EROFS
読み込みだけのファイルシステム上のファイルを filename が参照している。
EUSERS
使用可能なファイル構造体がないか、メモリが足りない。
 

準拠

SVr4, 4.3BSD (POSIX ではない)。  

注意

システムがクラッシュした時に実行中だったプログラムのアカウントは生成されない。 特に、終了しないプログラムがアカウントされることはない。

アカウント用ファイルに書き込まれるレコードの構造体については acct(5) に説明がある。  

関連項目

acct(5)


 

Index

名前
書式
説明
返り値
エラー
準拠
注意
関連項目

This document was created by man2html using the manual pages.
Time: 17:38:03 GMT, October 23, 2013

2. acct.5.man

Manpage of ACCT

ACCT

Section: Linux Programmer's Manual (5)
Updated: 2008-06-15
Index Return to Main Contents
 

名前

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_uidac_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)


 

Index

名前
書式
説明
バージョン 3 のアカウンティングファイルのフォーマット
バージョン
準拠
注意
関連項目

This document was created by man2html using the manual pages.
Time: 17:38:03 GMT, October 23, 2013

SVENSKA - SVENSKA - SVENSKA - SVENSKA - nl - pl - SVENSKA