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;           /* флаги учёта */
        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;     /* время работы ЦП в пользовательском режиме */
        comp_t    ac_stime;     /* время работы ЦП в системном режиме */
        comp_t    ac_etime;     /* прошедшее время */
        comp_t    ac_mem;       /* среднее количество использованной памяти (КБ) */
        comp_t    ac_io;        /* передано символов (не используется) */
        comp_t    ac_rw;        /* прочитано или записано блоков (не используется) */
        comp_t    ac_minflt;    /* промахи для вспомогательных страниц */
        comp_t    ac_majflt;    /* промахи для главных страниц */
        comp_t    ac_swaps;     /* количество подкачек (не используется) */
        u_int32_t ac_exitcode;  /* код завершения процесса
                                   (см. wait(2)) */
        char      ac_comm[ACCT_COMM+1];
                                /* имя команды (basename от последней
                                   исполнявшейся команды; завершается null) */
        char      ac_pad[X];    /* байты заполнения */
    };
    enum {                      /* биты для поля ac_flag */
        AFORK = 0x01,           /* был выполнен fork, но не exec */
        ASU   = 0x02,           /* использовались права суперпользователя */
        ACORE = 0x08,           /* создан файл core */
        AXSIG = 0x10            /* завершён по сигналу */
    };

Тип данных 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
Since Linux 2.6.8, an optional alternative version of the accounting file can be produced if the CONFIG_BSD_PROCESS_ACCT_V3 option is set when building the kernel. With this option is set, the records written to the accounting file contain additional fields, and the width of c_uid and ac_gid fields is widened from 16 to 32 bits (in line with the increased size of UID and GIDs in Linux 2.4 and later). The records are defined as follows:

    struct acct_v3 {
        char      ac_flag;      /* флаги */
        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;     /* время работы ЦП в пользовательском режиме */
        comp_t    ac_stime;     /* время работы ЦП в системном режиме */
        comp_t    ac_mem;       /* среднее количество использованной памяти (КБ) */
        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]; /* имя команды */
    };

ВЕРСИИ
The acct_v3 structure is defined since glibc 2.6.

СТАНДАРТЫ
Учёт процессов возник в BSD. Хотя он есть в большинстве систем, он не стандартизован, и параметры разнятся между системами.

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

Up to and including Linux 2.6.9, a separate accounting record is written for each thread created using the NPTL threading library; since Linux 2.6.10, a single accounting record is written for the entire process on termination of the last thread in the process.

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

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

ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Dmitry Bolkhovskikh <d20052005@yandex.ru> и Yuri Kozlov <yuray@komyakino.ru>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.