times(2) System Calls Manual times(2) NAZWA times - pobiera czasy procesow BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include clock_t times(struct tms *buf); OPIS times() przechowuje biezace czasy wykonywania procesu w struct tms, do ktorej prowadzi buf. struct tms jest zdefiniowana w nastepujaco: struct tms { clock_t tms_utime; /* czas w przestrzeni uzytkownika */ clock_t tms_stime; /* czas systemowy */ clock_t tms_cutime; /* czas w przestrzeni uzytkownika dla dzieci*/ clock_t tms_cstime; /* czas systemowy dzieci */ }; Pole tms_utime zawiera czas CPU spedzony na wykonywaniu instrukcji procesu wywolujacego te funkcje. Pole tms_stime zawiera czas CPU spedzony w systemie podczas wykonywania zadan zleconych przez proces. Pole tms_cutime zawiera sume tms_utime i tms_cutime wartosci dla wszystkich dzieci, na ktore proces czekal. Pole tms_cstime zawiera sume wartosci tms_stime i tms_cstime dla wszystkich dzieci, na ktore proces czekal. Czas zakonczonych procesow-dzieci (i ich potomkow) jest dodawany w momencie, gdy wait(2) lub waitpid(2) zwroca ich identyfikatory procesu. W szczegolnosci nigdy nie zostana policzone czasy wnukow, na ktore dzieci nie poczekaly. Wszystkie raportowane czasy sa wyrazone w tyknieciach zegara. WARTOSC ZWRACANA times() zwraca liczbe tykniec zegara, ktore uplynely od pewnego wybranego punktu przeszlosci. Wartosc zwracana moze przekroczyc dopuszczalny zakres typu clock_t. W razie bledu zwracane jest (clock_t) -1 i odpowiednio ustawiane errno, wskazujac blad. BLEDY EFAULT tms wskazuje na pamiec poza przestrzenia adresowa procesu. WERSJE Pod Linuksem argument buf moze miec wartosc NULL, w czego wyniku times() tylko zwroci wynik funkcji. Jednakze POSIX nie okresla takiego zachowania i wiekszosc innych implementacji uniksowych wymaga, aby parametr buf nie byl NULL-em. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, SVr4, 4.3BSD. W standardzie POSIX-1996 symbol CLK_TCK (zdefiniowany w ) jest uznany za starzejacy sie. Obecnie jest przestarzaly. Przed Linuksem 2.6.9, jezeli obsluga sygnalu SIGCHLD jest ustawiona na SIG_IGN, to czasy zakonczonych dzieci sa automatycznie zawarte w polach tms_cstime i tms_cutime, mimo ze POSIX.1-2001 okresla, ze tak sie powinno sie zdarzyc tylko wtedy, gdy proces czeka na swoje dzieci za pomoca wywolania systemowego wait(2). To niedostosowanie do standardu jest poprawione w Linuksie w wersji 2.6.9 i kolejnych. Funkcja times() zwraca liczbe tykniec zegara, ktore uplynely od pewnego wybranego punktu przeszlosci. Pod Linuksem ow ,,pewien wybrany punkt w przyszlosci" jest rozny w roznych wersjach jadra systemu. W Linuksie 2.4 i wczesniejszych tym punktem jest moment uruchomienia systemu. Od wersji 2.6 Linuksa tym punktem jest (2^32/HZ) - 300 sekund przed momentem uruchomienia systemu. Ta wariantywnosc pomiedzy wersjami jadra (i pomiedzy roznymi implementacjami Uniksa) polaczona z faktem, ze wartosc zwracana moze przekroczyc dopuszczalny zakres typu clock_t, oznacza, ze przenosne aplikacje powinny unikac uzywania tej wartosci. Aby zmierzyc uplyw czasu, lepiej uzywac clock_gettime(2). SVr1-3 zwraca long, a czlonkowie struktury sa typu time_t, chociaz przechowuja tykniecia zegara, a nie sekundy od poczatku epoki. V7 uzywal typu long dla czlonkow struktury, poniewaz nie mial jeszcze wtedy typu time_t. UWAGI Liczbe tykniec zegara na sekunde mozna uzyskac, uzywajac: sysconf(_SC_CLK_TCK); Prosze zauwazyc, ze clock(3) takze zwraca wartosci typu clock_t, ktore sa wyrazone w jednostkach CLOCKS_PER_SEC, a nie w tyknieciach zegara, uzywanych przez times(). USTERKI Ograniczenie w konwencjach tego wywolania systemowego na niektorych architekturach systemowych (zwlaszcza i386) oznacza, ze w Linuksie 2.6 istnieje niewielkie okno czasowe (41 sekund) zaraz po uruchomieniu systemu, w ktorym times() moze zwrocic -1, niepoprawnie wskazujac na wystapienie bledu. Ten sam problem moze wystapic, kiedy wartosc zwracana zostanie zawinieta, gdyz przekroczy maksymalna dopuszczalna wartosc dla typu clock_t. ZOBACZ TAKZE time(1), getrusage(2), wait(2), clock(3), sysconf(3), time(7) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: 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. times(2)