> Linux Reviews > man >

acct


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


1. acct.2.man

Manpage of ACCT

ACCT

Section: Руководство программиста Linux (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() включает или выключает учёт процессов. Если при вызове, в качестве аргумента, указывается имя существующего файла, происходит включение учёта, ипри завершении процесса, в файл filename добавляются записи для каждого завершившегося процесса. Если в качестве аргумента указан NULL, то учёт выключается.  

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.  

ОШИБКИ

EACCES
Нет прав на запись в указанный файл, или в одном из каталогов в pathname не разрешён поиск (см. также path_resolution(7)), или filename не является обычным файлом.
EFAULT
Аргумент filename указывает за пределы доступного адресного пространства.
EIO
Ошибка записи в файл filename.
EISDIR
filename является каталогом.
ELOOP
Во время определения pathname встретилось слишком много символьных ссылок.
ENAMETOOLONG
Слишком длинное значение аргумента pathname.
ENFILE
Достигнуто максимальное количество открытых файлов в системе.
ENOENT
Указанный файл не существует.
ENOMEM
Не хватает памяти.
ENOSYS
BSD учёт процессов не может быть разрешён, если эта возможность не была включена при компиляции ядра операционной системы. Этой возможностью управляет параметр настройки ядра CONFIG_BSD_PROCESS_ACCT.
ENOTDIR
Компонент пути в pathname в действительности не является каталогом.
EPERM
Вызвавшему процессу не хватает прав включить учёт процессов. В Linux для этого требуется мандат CAP_SYS_PACCT.
EROFS
Аргумент filename ссылается на файл, который находится на файловой системе, смонтированной только для чтения.
EUSERS
Закончились свободные файловые структуры или память.
 

СООТВЕТСТВИЕ СТАНДАРТАМ

SVr4, 4.3BSD (но не POSIX).  

ЗАМЕЧАНИЯ

Учёт не производится для программ, которые заканчиваются аварийно. В частности, незавершаемые процессы никогда не учитываются.

Структура записей, записываемых в файл учёта, описана в acct(5).  

СМОТРИТЕ ТАКЖЕ

acct(5)


 

Index

ИМЯ
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СООТВЕТСТВИЕ СТАНДАРТАМ
ЗАМЕЧАНИЯ
СМОТРИТЕ ТАКЖЕ

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

2. acct.5.man

Manpage of ACCT

ACCT

Section: Руководство программиста Linux (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;           /* флаги учёта */
    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

Начиная с ядра версии 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;      /* флаги */
    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]; /* имя команды */
};

 

ВЕРСИИ

Структура acct_v3 определена в glibc начиная с версии 2.6.  

СООТВЕТСТВИЕ СТАНДАРТАМ

Учёт процессов возник в 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:41:08 GMT, October 23, 2013

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