acct

ACCT(5)                  Podręcznik programisty Linuksa                  ACCT(5)



NAZWA
       acct - plik ewidencji procesu

SKŁADNIA
       #include <sys/acct.h>

OPIS
       Jeśli jądro zostało zbudowane z włączoną opcją ewidencjonowania procesów
       (CONFIG_BSD_PROCESS_ACCT), to wywołanie funkcji systemowej acct(2) włącza
       to ewidencjonowanie, na przykład:

           acct("/var/log/pacct");

       Kiedy ewidencjonowanie procesów jest włączone, jądro zapisuje rekord do
       pliku ewidencji dla każdego zakończonego procesu w systemie. Rekord ten
       zawiera informacje o zakończonym procesie i jest zdefiniowany
       <sys/acct.h> następująco:

           #define ACCT_COMM 16

           typedef u_int16_t comp_t;

           struct acct {
               char ac_flag;           /* Znaczniki ewidencjonowania */
               u_int16_t ac_uid;       /* ID użytkownika */
               u_int16_t ac_gid;       /* ID grupy */
               u_int16_t ac_tty;       /* Terminal sterujący */
               u_int32_t ac_btime;     /* Czas utworzenia procesu
                                          (w sekundach od początku epoki) */
               comp_t    ac_utime;     /* Czas CPU użytkownika*/
               comp_t    ac_stime;     /* Czas CPU systemu */
               comp_t    ac_etime;     /* Czas działania procesu */
               comp_t    ac_mem;       /* Średnie użycie pamięci (kB) */
               comp_t    ac_io;        /* Przesłane znaki (nieużywane) */
               comp_t    ac_rw;        /* Bloki odczytane lub zapisane (nieużywane) */
               comp_t    ac_minflt;    /* Mniejsze błędy stron */
               comp_t    ac_majflt;    /* Większe błędy stron */
               comp_t    ac_swaps;     /* Liczba wymian (nieużywane) */
               u_int32_t ac_exitcode;  /* Status zakończenia procesu
                                          (patrz wait(2)) */
               char      ac_comm[ACCT_COMM+1];
                                       /* Nazwa polecenia (zakończona znakiem null
                                          nazwa bazowa ostatnio wykonywanego polecenia) */
               char      ac_pad[X];    /* bajty wyrównania */
           };

           enum {          /* Bity, które mogą być ustawione w polu ac_flag */
               AFORK = 0x01,           /* Wykonał fork, ale nie exec */
               ASU   = 0x02,           /* Używał przywilejów administratora */
               ACORE = 0x08,           /* Wykonał zrzut pamięci (core) */
               AXSIG = 0x10            /* Został zabity sygnałem */
           };

       Typ danych comp_t jest wartością zmiennoprzecinkową składającą się z
       3-bitowego wykładnika o podstawie 8 oraz 13-bitowej mantysy. Wartość c
       tego typu można skonwertować do typu long integer w następujący sposób:

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

       Pola ac_utime, ac_stime oraz ac_etime odmierzają czas w "tyknięciach
       zegara"; aby skonwertować go na sekundy, należy podzielić te wartości
       przez sysconf(_SC_CLK_TCK).

   Wersja 3 formatu pliku ewidencji
       Od wersji jądra 2.6.8 może być tworzona alternatywna wersja pliku
       ewidencji, jeżeli podczas budowania jądra ustawiono opcję
       CONFIG_BSD_PROCESS_ACCT_V3. Jeśli ta opcja jest ustawiona, to plik
       ewidencji zawiera dodatkowe pola, a szerokość pól c_uid i ac_gid jest
       zwiększona z 16 do 32 bitów (dostosowując do zwiększonego rozmiaru
       identyfikatorów użytkowników i grup w Linuksie 2.4 i późniejszych).
       Rekordy są zdefiniowane następująco:

           struct acct_v3 {
               char      ac_flag;      /* Znaczniki */
               char      ac_version;   /* Zawsze ustawione na ACCT_VERSION (3) */
               u_int16_t ac_tty;       /* Terminal sterujący */
               u_int32_t ac_exitcode;  /* Stan zakończenia procesu */
               u_int32_t ac_uid;       /* Rzeczywiste ID użytkownika */
               u_int32_t ac_gid;       /* Rzeczywiste ID grupy */
               u_int32_t ac_pid;       /* ID procesu */
               u_int32_t ac_ppid;      /* ID procesu rodzica */
               u_int32_t ac_btime;     /* Czas utworzenia procesu */
               float     ac_etime;     /* Czas działania procesu */
               comp_t    ac_utime;     /* Czas CPU użytkownika */
               comp_t    ac_stime;     /* Czas CPU systemu */
               comp_t    ac_mem;       /* Średnie zużycie pamięci (kB) */
               comp_t    ac_io;        /* Transferowane znaki(nieużywane) */
               comp_t    ac_rw;        /* Bloki przeczytane lub zapisane
                                          (nieużywane) */
               comp_t    ac_minflt;    /* Mniejsze błędy stron */
               comp_t    ac_majflt;    /* Większe błędy stron */
               comp_t    ac_swaps;     /* Liczba wymian (nieużywane) */
               char      ac_comm[ACCT_COMM]; /* Nazwa polecenia */
           };

WERSJE
       Struktura acct_v3 jest definiowana w glibc począwszy od wersji 2.6.

ZGODNE Z
       Ewidencjonowanie procesów ma swój początek w systemach BSD. Chociaż jest
       obsługiwane przez większość systemów, to nie jest ustandaryzowane, więc
       szczegóły implementacji mogą się różnić między systemami.

UWAGI
       Rekordy pliku ewidencji są posortowane po czasie zakończenia procesu.

       W jądrach aż do wersji 2.6.9 włącznie oddzielny rekord ewidencji jest
       zapisywany dla każdego wątku tworzonego przez bibliotekę NPTL. Od wersji
       2.6.10 Linuksa pojedynczy rekord jest zapisywany dla całego procesu po
       zakończeniu ostatniego jego wątku.

       The /proc/sys/kernel/acct file, described in proc(5), defines settings
       that control the behavior of process accounting when disk space runs low.

ZOBACZ TAKŻE
       lastcomm(1), acct(2), accton(8), sa(8)

O STRONIE
       Angielska wersja tej strony pochodzi z wydania 5.11 projektu Linux
       man-pages. Opis projektu, informacje dotyczące zgłaszania błędów oraz
       najnowszą wersję oryginału można znaleźć pod adresem
       https://www.kernel.org/doc/man-pages/.


TŁUMACZENIE
       Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Andrzej
       Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda
       <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o
       warunkach licencji można uzyskać zapoznając się z GNU General Public
       License w wersji 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres
       manpages-pl-list@lists.sourceforge.net ⟨⟩.



Linux                           22 marca 2021 r.                         ACCT(5)