acct(5)

НАИМЕНОВАНИЕ
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-разрядной мантиссы. Переменная c этого типа может быть преобразована к целому числу (long) следующим образом:

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

Поля ac_utime, ac_stime и ac_etime хранят время в "тактах часов"; для преобразования в секунды нужно разделить значения на sysconf(_SC_CLK_TCK).

  Формат файла учёта процессов версии 3
Начиная с ядра версии 2.6.8, можно создавать файл учёта альтернативной версии, если задать параметр CONFIG_BSD_PROCESS_ACCT_V3 при сборке ядра. Если этот параметр установлен, то записи, сохранённые в файле учёта, будут содержать дополнительные поля, а ширина полей c_uid и ac_gid будет расширена с 16 до 32 бит (для соответствия с увеличенным размером UID и GID в Linux 2.4 и позже). Записи определены следующим образом:

    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 */
    };

ВЕРСИИ
Хотя файл учёта процессов присутствует в большинстве систем, он не стандартизирован и подробности в разных системах несколько различаются.

СТАНДАРТЫ
Отсутствуют.

ИСТОРИЯ
glibc 2.6.

Программа учета процессов была разработана в BSD.

ПРИМЕЧАНИЯ
Записи в файле учёта упорядочены по времени завершения процессов.

Вплоть до Linux 2.6.9, включительно, для каждого потока, созданного с использованием библиотеки многопоточности NPTL, создавалась отдельная учетная запись. Начиная с Linux 2.6.10, при завершении последнего потока в процессе, записывается отдельная учетная запись для всего процесса.

В файле /proc/sys/kernel/acct, описанном в proc(5), определены настройки, которые управляют поведением учёта процессов при нехватке места на диске.

СМОТРИТЕ ТАКЖЕ
lastcomm(1), acct(2), accton(8), sa(8)

ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru>, Aleksandr Felda <isk8da@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).