acct(5) File Formats Manual acct(5) NAZWA acct - plik ewidencji procesu SKLADNIA #include OPIS Jesli jadro zostalo zbudowane z wlaczona opcja ewidencjonowania procesow (CONFIG_BSD_PROCESS_ACCT), to wywolanie funkcji systemowej acct(2) wlacza to ewidencjonowanie, na przyklad: acct("/var/log/pacct"); Kiedy ewidencjonowanie procesow jest wlaczone, jadro zapisuje rekord do pliku ewidencji dla kazdego zakonczonego procesu w systemie. Rekord ten zawiera informacje o zakonczonym procesie i jest zdefiniowany nastepujaco: #define ACCT_COMM 16 typedef u_int16_t comp_t; struct acct { char ac_flag; /* Znaczniki ewidencjonowania */ u_int16_t ac_uid; /* ID uzytkownika */ u_int16_t ac_gid; /* ID grupy */ u_int16_t ac_tty; /* Terminal sterujacy */ u_int32_t ac_btime; /* Czas utworzenia procesu (w sekundach od poczatku epoki) */ comp_t ac_utime; /* Czas CPU uzytkownika*/ comp_t ac_stime; /* Czas CPU systemu */ comp_t ac_etime; /* Czas dzialania procesu */ comp_t ac_mem; /* Srednie uzycie pamieci (kB) */ comp_t ac_io; /* Przeslane znaki (nieuzywane) */ comp_t ac_rw; /* Bloki odczytane lub zapisane (nieuzywane) */ comp_t ac_minflt; /* Mniejsze bledy stron */ comp_t ac_majflt; /* Wieksze bledy stron */ comp_t ac_swaps; /* Liczba wymian (nieuzywane) */ u_int32_t ac_exitcode; /* Status zakonczenia procesu (patrz wait(2)) */ char ac_comm[ACCT_COMM+1]; /* Nazwa polecenia (zakonczona znakiem null nazwa bazowa ostatnio wykonywanego polecenia) */ char ac_pad[X]; /* bajty wyrownania */ }; enum { /* Bity, ktore moga byc ustawione w polu ac_flag */ AFORK = 0x01, /* Wykonano fork, ale nie exec */ ASU = 0x02, /* Uzyte przywileje superuzytkownika */ ACORE = 0x08, /* Zrzucono pamiec */ AXSIG = 0x10 /* Zabito sygnalem */ }; }; Typ danych comp_t jest wartoscia zmiennoprzecinkowa skladajaca sie z 3-bitowego wykladnika o podstawie 8 oraz 13-bitowej mantysy. Wartosc c tego typu mozna skonwertowac do typu long integer w nastepujacy sposob: v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3); Pola ac_utime, ac_stime oraz ac_etime odmierzaja czas w ,,tyknieciach zegara"; aby skonwertowac go na sekundy, nalezy podzielic te wartosci przez sysconf(_SC_CLK_TCK). Wersja 3 formatu pliku ewidencji Od Linuksa 2.6.8 moze byc tworzona alternatywna wersja pliku ewidencji, jezeli podczas budowania jadra ustawiono opcje CONFIG_BSD_PROCESS_ACCT_V3. Jesli ta opcja jest ustawiona, to plik ewidencji zawiera dodatkowe pola, a szerokosc pol c_uid i ac_gid jest zwiekszona z 16 do 32 bitow (dostosowujac do zwiekszonego rozmiaru identyfikatorow uzytkownikow i grup w Linuksie 2.4 i pozniejszych). Rekordy sa zdefiniowane nastepujaco: struct acct_v3 { char ac_flag; /* Znaczniki */ char ac_version; /* Zawsze ustawione na ACCT_VERSION (3) */ u_int16_t ac_tty; /* Terminal sterujacy */ u_int32_t ac_exitcode; /* Stan zakonczenia procesu */ u_int32_t ac_uid; /* Rzeczywiste ID uzytkownika */ 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 dzialania procesu */ comp_t ac_utime; /* Czas CPU uzytkownika */ comp_t ac_stime; /* Czas CPU systemu */ comp_t ac_mem; /* Srednie zuzycie pamieci (kB) */ comp_t ac_io; /* Transferowane znaki(nieuzywane) */ comp_t ac_rw; /* Bloki przeczytane lub zapisane (nieuzywane) */ comp_t ac_minflt; /* Mniejsze bledy stron */ comp_t ac_majflt; /* Wieksze bledy stron */ comp_t ac_swaps; /* Liczba wymian (nieuzywane) */ char ac_comm[ACCT_COMM]; /* Nazwa polecenia */ }; WERSJE Chociaz jest obslugiwane przez wiekszosc systemow, to nie jest zestandaryzowane, wiec szczegoly implementacji moga sie roznic miedzy systemami. STANDARDY Brak. HISTORIA glibc 2.6. Ewidencjonowanie procesow ma swoj poczatek w systemach BSD. UWAGI Rekordy pliku ewidencji sa posortowane po czasie zakonczenia procesu. Do Linuksa 2.6.9 wlacznie oddzielny rekord ewidencji jest zapisywany dla kazdego watku tworzonego przez biblioteke NPTL. Od Linuksa 2.6.10 pojedynczy rekord jest zapisywany dla calego procesu po zakonczeniu ostatniego jego watku. Plik /proc/sys/kernel/acct opisany w proc(5) definiuje ustawienia wplywajace na zachowanie ewidencjonowania procesow, gdy wyczerpuje sie miejsce na dysku. ZOBACZ TAKZE lastcomm(1), acct(2), accton(8), sa(8) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.9.1 2 maja 2024 r. acct(5)