getrusage(2) System Calls Manual getrusage(2) NAZWA getrusage - pobiera uzycie zasobow BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int getrusage(int who, struct rusage *usage); OPIS getrusage() zwraca uzycie zasobow zmierzone dla who, ktorym moze byc jeden z: RUSAGE_SELF Zwraca statystyki uzycia zasobow procesu wywolujacego, czyli sume zasobow uzytych przez wszystkie watki procesu. RUSAGE_CHILDREN Zwraca statystyki uzycia zasobow przez wszystkie dzieci procesu wywolujacego, ktore sie zakonczyly i na ktore sie oczekuje. Statystyki te obejma zasoby uzyte przez wnuki i kolejne pokolenia, jesli wszystkie one oczekuja na swoich zakonczonych potomkow. RUSAGE_THREAD (od Linuksa 2.6.26) Zwraca statystyki uzycia zasobow przez watek wywolujacy. Aby uzyskac definicje tej stalej z konieczne jest zdefiniowanie makra sprawdzania cech _GNU_SOURCE (przed dolaczeniem jakichkolwiek plikow naglowkowych). Uzycie zasobow jest zwracane w strukturze, na ktora wskazuje usage, w postaci: struct rusage { struct timeval ru_utime; /* uzyty czas procesora uzytkownika */ struct timeval ru_stime; /* uzyty czas procesora systemu */ long ru_maxrss; /* maksymalny rozmiar zestawu rezydentnego */ long ru_ixrss; /* calkowity rozmiar pamieci dzielonej */ long ru_idrss; /* calkowity rozmiar niedzielonych danych */ long ru_isrss; /* calkowity rozmiar niedzielonego stosu */ long ru_minflt; /* odzyskane strony (pomniejsze chybienia) */ long ru_majflt; /* chybienia stron (glowne chybienia) */ long ru_nswap; /* wymienione strony */ long ru_inblock; /* blokowe operacje wejscia */ long ru_oublock; /* blokowe operacje wyjscia */ long ru_msgsnd; /* wyslane komunikaty IPC */ long ru_msgrcv; /* otrzymane komunikaty IPC */ long ru_nsignals; /* otrzymane sygnaly */ long ru_nvcsw; /* dobrowolne przelaczenia kontekstu */ long ru_nivcsw; /* przymusowe przelaczenia kontekstu */ }; Nie wszystkie pola sa ukonczone; pola nieutrzymywane sa ustawiane na zero przez jadro (pola nieutrzymywane sa zapewniane ze wzgledu na kompatybilnosc z innymi systemami i poniewaz w przyszlosci moga byc obslugiwane w Linuksie). Pola sa interpretowane w nastepujacy sposob: ru_utime Calkowity czas spedzony na wykonywaniu w trybie uzytkownika, wyrazony jako struktura timeval (sekundy i mikrosekundy). ru_stime Calkowity czas spedzony na wykonywaniu w trybie jadra, wyrazony jako struktura timeval (sekundy i mikrosekundy). ru_maxrss (od Linuksa 2.6.32) Szczytowy osiagniety rozmiar zestawu rezydentnego (,,resident set size" -- RSS; w kilobajtach). W przypadku RUSAGE_CHILDREN, dotyczy to RSS najwiekszego potomka, a nie RSS calego drzewa procesow. ru_ixrss (nieutrzymywane) W Linuksie, pole to jest aktualnie nieuzywane. ru_idrss (nieutrzymywane) W Linuksie, pole to jest aktualnie nieuzywane. ru_isrss (nieutrzymywane) W Linuksie, pole to jest aktualnie nieuzywane. ru_minflt Liczba chybien stron (page fault), obsluzonych bez aktywnosci wejscia/wyjscia; aktywnosc ta jest unikana dzieki ,,odzyskaniu" ramki strony z listy stron oczekujacych na realokacje. ru_majflt Liczba obsluzonych chybien stron, ktore wymagaly aktywnosci wejscia/wyjscia. ru_nswap (nieutrzymywane) W Linuksie, pole to jest aktualnie nieuzywane. ru_inblock (od Linuksa 2.6.22) Liczba przypadkow, w ktorych system plikow musial obsluzyc wejscie. ru_oublock (od Linuksa 2.6.22) Liczba przypadkow, w ktorych system plikow musial obsluzyc wyjscie. ru_msgsnd (nieutrzymywane) W Linuksie, pole to jest aktualnie nieuzywane. ru_msgrcv (nieutrzymywane) W Linuksie, pole to jest aktualnie nieuzywane. ru_nsignals (nieutrzymywane) W Linuksie, pole to jest aktualnie nieuzywane. ru_nvcsw (od Linuksa 2.6) Liczba przypadkow, w ktorych wystapilo przelaczenie kontekstu, ze wzgledu na dobrowolne zwolnienie procesora przez proces, przed wykorzystaniem jego jednostki czasu (zwykle w celu oczekiwania na dostepnosc zasobu). ru_nivcsw (od Linuksa 2.6) Liczba przypadkow, w ktorych wystapilo przelaczenie kontekstu, ze wzgledu na pojawienie sie dzialajacego procesu o wyzszym priorytecie lub ze wzgledu na przekroczenie swojej jednostki czasu przez biezacy proces. WARTOSC ZWRACANA Po pomyslnym zakonczeniu zwracane jest zero. Po bledzie zwracane jest -1 i ustawiane errno, wskazujac blad. BLEDY EFAULT usage wskazuje poza dostepna przestrzen adresowa. EINVAL who jest nieprawidlowe. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |getrusage() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ STANDARDY POSIX.1-2008. POSIX.1 okresla getrusage(), lecz opisuje jedynie pola ru_utime i ru_stime. RUSAGE_THREAD jest typowo linuksowe. HISTORIA POSIX.1-2001, SVr4, 4.3BSD. Przed Linuksem 2.6.9, jesli dyspozycje SIGCHLD ustawiono na SIG_IGN, to w wartosci zwracanej przez RUSAGE_CHILDREN, automatycznie uwzgledniane jest uzycie zasobu przez procesy potomne, mimo ze POSIX.1-2001 wyraznie tego zabrania. Te niezgodnosc ze standardem usunieto w Linuksie 2.6.9 i nowszych. Definicje struktury pokazana na poczatku niniejszego podrecznika zaczerpnieto z 4.3BSD Reno. Bardzo stare systemy udostepnialy funkcje vtimes() o podobnym przeznaczeniu co getrusage(). Ze wzgledu na kompatybilnosc, glibc (do Linuksa 2.32) rowniez dostarczal vtimes(). Wszystkie nowe aplikacje powinny byc pisane z wykorzystaniem getrusage() (od Linuksa 2.33, glibc nie udostepnia juz implementacji vtimes()). UWAGI Wskazniki uzycia zasobow sa zachowywane przy execve(2). ZOBACZ TAKZE clock_gettime(2), getrlimit(2), times(2), wait(2), wait4(2), clock(3), proc_pid_stat(5), proc_pid_io(5) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: 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.15 17 maja 2025 r. getrusage(2)