times(2)

NAZWA
times - pobiera czasy procesów

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

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

clock_t times(struct tms *buf);

OPIS
times() przechowuje bieżące czasy wykonywania procesu w struct tms, do której prowadzi buf. struct tms jest zdefiniowana w <sys/times.h> następująco:

    struct tms {
      clock_t tms_utime;  /* czas w przestrzeni użytkownika */
      clock_t tms_stime;  /* czas systemowy */
      clock_t tms_cutime; /* czas w przestrzeni użytkownika dla dzieci*/
      clock_t tms_cstime; /* czas systemowy dzieci */
    };

Pole tms_utime zawiera czas CPU spędzony na wykonywaniu instrukcji procesu wywołującego tę funkcję. Pole tms_stime zawiera czas CPU spędzony w systemie podczas wykonywania zadań zleconych przez proces.

Pole tms_cutime zawiera sumę tms_utime i tms_cutime wartości dla wszystkich dzieci, na które proces czekał. Pole tms_cstime zawiera sumę wartości tms_stime i tms_cstime dla wszystkich dzieci, na które proces czekał.

Czas zakończonych procesów-dzieci (i ich potomków) jest dodawany w momencie, gdy wait(2) lub waitpid(2) zwrócą ich identyfikatory procesu. W szczególności nigdy nie zostaną policzone czasy wnuków, na które dzieci nie poczekały.

Wszystkie raportowane czasy są wyrażone w tyknięciach zegara.

WARTOŚĆ ZWRACANA
times() returns the number of clock ticks that have elapsed since an arbitrary point in the past. The return value may overflow the possible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set to indicate the error.

BŁĘDY

EFAULT
    tms wskazuje na pamięć poza przestrzenią adresową procesu.

WERSJE
Pod Linuksem argument buf może mieć wartość NULL, w czego wyniku times() tylko zwróci wynik funkcji. Jednakże POSIX nie określa takiego zachowania i większość innych implementacji uniksowych wymaga, aby parametr buf nie był NULL-em.

STANDARDY
POSIX.1-2008.

HISTORIA
POSIX.1-2001, SVr4, 4.3BSD.

W standardzie POSIX-1996 symbol CLK_TCK (zdefiniowany w <time.h>) jest uznany za starzejący się. Obecnie jest przestarzały.

Before Linux 2.6.9, if the disposition of SIGCHLD is set to SIG_IGN, then the times of terminated children are automatically included in the tms_cstime and tms_cutime fields, although POSIX.1-2001 says that this should happen only if the calling process wait(2)s on its children. This nonconformance is rectified in Linux 2.6.9 and later.

Funkcja times() zwraca liczbę tyknięć zegara, które upłynęły od pewnego wybranego punktu przeszłości. Pod Linuksem ów "pewien wybrany punkt w przyszłości" jest różny w różnych wersjach jądra systemu. W Linuksie 2.4 i wcześniejszych tym punktem jest moment uruchomienia systemu. Od wersji 2.6 Linuksa tym punktem jest (2^32/HZ) - 300 sekund przed momentem uruchomienia systemu. Ta wariantywność pomiędzy wersjami jądra (i pomiędzy różnymi implementacjami Uniksa) połączona z faktem, że wartość zwracana może przekroczyć dopuszczalny zakres typu clock_t, oznacza, że przenośne aplikacje powinny unikać używania tej wartości. Aby zmierzyć upływ czasu, lepiej używać clock_gettime(2).

SVr1-3 zwraca long, a członkowie struktury są typu time_t, chociaż przechowują tyknięcia zegara, a nie sekundy od początku epoki. V7 używał typu long dla członków struktury, ponieważ nie miał jeszcze wtedy typu time_t.

UWAGI
Liczbę tyknięć zegara na sekundę można uzyskać, używając:

    sysconf(_SC_CLK_TCK);

Proszę zauważyć, że clock(3) także zwraca wartości typu clock_t, które są wyrażone w jednostkach CLOCKS_PER_SEC, a nie w tyknięciach zegara, używanych przez times().

USTERKI
Ograniczenie w konwencjach tego wywołania systemowego na niektórych architekturach systemowych (zwłaszcza i386) oznacza, że w Linuksie 2.6 istnieje niewielkie okno czasowe (41 sekund) zaraz po uruchomieniu systemu, w którym times() może zwrócić -1, niepoprawnie wskazując na wystąpienie błędu. Ten sam problem może wystąpić, kiedy wartość zwracana zostanie zawinięta, gdyż przekroczy maksymalną dopuszczalną wartość dla typu clock_t.

ZOBACZ TAKŻE
time(1), getrusage(2), wait(2), clock(3), sysconf(3), time(7)

TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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 listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.