times(2) System Calls Manual times(2)

times - obține timpii procesului

Biblioteca C standard (libc, -lc)

#include <sys/times.h>
clock_t times(struct tms *buf);

times() stochează timpii procesului curent în struct tms la care indică buf. structl tms este definită în <sys/times.h>:


struct tms {
    clock_t tms_utime;  /* timpul utilizatorului */
    clock_t tms_stime;  /* timpul sistemului */
    clock_t tms_cutime; /* timpul de utilizator al proceselor-copil */
    clock_t tms_cstime; /* timpul de sistem al proceselor-copil */
};

Câmpul tms_utime conține timpul petrecut de CPU în executarea instrucțiunilor procesului de apelare. Câmpul tms_stime conține timpul petrecut de CPU în timpul execuției în interiorul nucleului în timp ce efectuează sarcini în numele procesului apelant.

Câmpul tms_cutime conține suma valorilor tms_utime și tms_cutime pentru toate procesele/firele-copil așteptate să se termine. Câmpul tms_cstime conține suma valorilor tms_stime și tms_cstime toate procesele/firele-copil așteptate să se termine.

Timpii pentru copiii terminați (și pentru descendenții lor) sunt adăugați în momentul în care wait(2) sau waitpid(2) returnează ID-ul lor de proces. În special, timpii nepoților pe care copiii nu i-au așteptat nu sunt văzuți niciodată.

Toate duratele de timp raportate sunt exprimate în „tic-tacuri” de ceas.

times() returnează numărul de ticuri de ceas care s-au scurs de la un punct arbitrar din trecut. Valoarea returnată poate depăși intervalul posibil al tipului clock_t. În caz de eroare, se returnează (clock_t) -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

tms indică în afara spațiului de adrese al procesului.

În Linux, argumentul buf poate fi specificat ca fiind NULL, ceea ce înseamnă că times() returnează doar un rezultat de funcție. Cu toate acestea, POSIX nu specifică acest comportament, iar majoritatea celorlalte implementări UNIX necesită o valoare non-NULL pentru buf.

POSIX.1-2008.

POSIX.1-2001, SVr4, 4.3BSD.

În POSIX.1-1996, simbolul CLK_TCK (definit în <time.h>) este menționat ca fiind învechit. Acesta este învechit în prezent.

Înainte de Linux 2.6.9, dacă dispoziția lui SIGCHLD este stabilită la SIG_IGN, atunci timpii copiilor terminați sunt automat incluși în câmpurile tms_cstime și tms_cutime, deși POSIX.1-2001 spune că acest lucru ar trebui să se întâmple numai dacă procesul apelant efectuează wait(2)s pe copiii săi. Această neconformitate este rectificată în Linux 2.6.9 și versiunile ulterioare.

În Linux, punctul „arbitrar din trecut” de la care se măsoară valoarea de întoarcere a times() a variat între versiunile nucleului. În Linux 2.4 și versiunile anterioare, acest punct este momentul în care sistemul a fost inițiat. â Începând cu Linux 2.6, acest punct este (2^32/HZ) - 300 secunde înainte de momentul de pornire a sistemului. Această variabilitate între versiunile nucleului (și între implementările UNIX), combinată cu faptul că valoarea returnată poate depăși intervalul clock_t, înseamnă că o aplicație portabilă ar fi înțelept să evite utilizarea acestei valori. Pentru a măsura modificările în timpul scurs, utilizați în schimb clock_gettime(2).

SVr1-3 returnează long, iar membrii structurii sunt de tip time_t, deși stochează ticuri de ceas, nu secunde de la Epocă. V7 a folosit long pentru membrii structurilor, deoarece nu avea încă tipul time_t.

Numărul de ticuri de ceas pe secundă poate fi obținut folosind:


sysconf(_SC_CLK_TCK);

Rețineți că clock(3) returnează, de asemenea, o valoare de tip clock_t, dar această valoare este măsurată în unități de CLOCKS_PER_SEC, nu în ticuri de ceas utilizate de times().

O limitare a convențiilor de apelare a sistemului Linux pe anumite arhitecturi (în special i386) înseamnă că pe Linux 2.6 există o mică fereastră de timp (41 de secunde) imediat după pornire, când times() poate returna -1, indicând în mod fals că a avut loc o eroare. Aceeași problemă poate apărea atunci când valoarea de returnare depășește valoarea maximă care poate fi stocată în clock_t.

time(1), getrusage(2), wait(2), clock(3), sysconf(3), time(7)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

31 octombrie 2023 Pagini de manual de Linux 6.06