times(2) System Calls Manual times(2) NUME times - obine timpii procesului BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include clock_t times(struct tms *buf); DESCRIERE times() stocheaza timpii procesului curent in struct tms la care indica buf. structl tms este definita in : 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 */ }; Campul tms_utime conine timpul petrecut de CPU in executarea instruciunilor procesului de apelare. Campul tms_stime conine timpul petrecut de CPU in timpul execuiei in interiorul nucleului in timp ce efectueaza sarcini in numele procesului apelant. Campul tms_cutime conine suma valorilor tms_utime i tms_cutime pentru toate procesele/firele-copil ateptate sa se termine. Campul tms_cstime conine suma valorilor tms_stime i tms_cstime toate procesele/firele-copil ateptate sa se termine. Timpii pentru copiii terminai (i pentru descendenii lor) sunt adaugai in momentul in care wait(2) sau waitpid(2) returneaza ID-ul lor de proces. In special, timpii nepoilor pe care copiii nu i-au ateptat nu sunt vazui niciodata. Toate duratele de timp raportate sunt exprimate in ,,tic-tacuri" de ceas. VALOAREA RETURNATA times() returneaza numarul de ticuri de ceas care s-au scurs de la un punct arbitrar din trecut. Valoarea returnata poate depai intervalul posibil al tipului clock_t. In caz de eroare, se returneaza (clock_t) -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EFAULT tms indica in afara spaiului de adrese al procesului. VERSIUNI In Linux, argumentul buf poate fi specificat ca fiind NULL, ceea ce inseamna ca times() returneaza doar un rezultat de funcie. Cu toate acestea, POSIX nu specifica acest comportament, iar majoritatea celorlalte implementari UNIX necesita o valoare non-NULL pentru buf. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4, 4.3BSD. In POSIX.1-1996, simbolul CLK_TCK (definit in ) este menionat ca fiind invechit. Acesta este invechit in prezent. Inainte de Linux 2.6.9, daca dispoziia lui SIGCHLD este stabilita la SIG_IGN, atunci timpii copiilor terminai sunt automat inclui in campurile tms_cstime i tms_cutime, dei POSIX.1-2001 spune ca acest lucru ar trebui sa se intample numai daca procesul apelant efectueaza wait(2)s pe copiii sai. Aceasta neconformitate este rectificata in Linux 2.6.9 i versiunile ulterioare. In Linux, punctul ,,arbitrar din trecut" de la care se masoara valoarea de intoarcere a times() a variat intre versiunile nucleului. In Linux 2.4 i versiunile anterioare, acest punct este momentul in care sistemul a fost iniiat. a Incepand cu Linux 2.6, acest punct este (2^32/HZ) - 300 secunde inainte de momentul de pornire a sistemului. Aceasta variabilitate intre versiunile nucleului (i intre implementarile UNIX), combinata cu faptul ca valoarea returnata poate depai intervalul clock_t, inseamna ca o aplicaie portabila ar fi inelept sa evite utilizarea acestei valori. Pentru a masura modificarile in timpul scurs, utilizai in schimb clock_gettime(2). SVr1-3 returneaza long, iar membrii structurii sunt de tip time_t, dei stocheaza ticuri de ceas, nu secunde de la Epoca. V7 a folosit long pentru membrii structurilor, deoarece nu avea inca tipul time_t. NOTE Numarul de ticuri de ceas pe secunda poate fi obinut folosind: sysconf(_SC_CLK_TCK); Reinei ca clock(3) returneaza, de asemenea, o valoare de tip clock_t, dar aceasta valoare este masurata in unitai de CLOCKS_PER_SEC, nu in ticuri de ceas utilizate de times(). ERORI O limitare a conveniilor de apelare a sistemului Linux pe anumite arhitecturi (in special i386) inseamna ca pe Linux 2.6 exista o mica fereastra de timp (41 de secunde) imediat dupa pornire, cand times() poate returna -1, indicand in mod fals ca a avut loc o eroare. Aceeai problema poate aparea atunci cand valoarea de returnare depaete valoarea maxima care poate fi stocata in clock_t. CONSULTAI I time(1), getrusage(2), wait(2), clock(3), sysconf(3), time(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 times(2)