costin wrote:
> O intstructiune poate sa dureze mult mai putin de 1 microsecunde.
>  -t     The maximum amount of cpu time in seconds => cantitatea de timp cpu in 
> secunde.
> Nu ar trebui exprimata in mai putin de o secunda ?

Daca ai vrea sa opresti procesul dupa ce a executat doar cateva mii de 
instructiuni, da. Dar banuiesc ca nimeni in afara de tine nu are nevoie 
de asa ceva, asa ca nu a fost implementat.

> In exemplu 
> 
> ulimit -t 5
> for ((i=1;i<10000000;i++)); do cat fisier.txt>/dev/null ;done;
> xterminalul e inchis dupa 5 secunde.

La mine e inchis cam dupa 20 de secunde, din cauza for-ului, nu a 
cat-ului sau orice comanda care se executa instantaneu ai pune tu acolo. 
Din cate vad, ulimit-ul se aplica si procesului bash care executa 
for-ul. Deci avem for-ul care la un pas consuma timpul t si un proces 
cat care consuma t*3 (in cazul meu). Cand for-ul a consumat 5 sec, 
cat-urile au consumat in total 15.

> ulimit -t 5
> while true; do cat /dev/zero>/dev/null;done
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> Killed
> ^C
> $

Aici sunt ucise cat-urile, care evident ca consuma timp CPU. Probabil ca 
daca l-ai lasa sa ruleze mii de ani, ar fi ucis si bash-ul din cauza ca 
s-ar acumula timpii in fiecare pas al while-ului.

> ulimit -t 5 
> while true ; do read ;done #nu e afectat de loc
> aa
> aaa
> aaa
> aaa
> aaa
> aa

Si te-ai fi asteptat sa fie?

> while true ; do echo aa;done #xterminaulul dispare pana la urma 
> aaa

Da, din cauza while-ului. Dureaza insa mai mult decat primul exemplu 
pentru ca un pas (scrierea aa pe ecran (sau mai degraba scrolling-ul)) 
dureaza mai mult decat cat-ul din primul exemplu, si timpul cpu consumat 
de while+echo (echo e comanda interna bash) creste mai greu.

> Procesul primeste in cele din urma SIGKILL dupa ce depaseste CPU time . 

Da.

>>>Cum sa dureze un sleep 15 mai mult de 10 sec cpu? Atentie: timpul cpu =
>>>user + sys, timpul real este t_end - t_start.
>>>Ceea ce limiteaza ulimit este timpul cpu nu timpul real.
> 
> Deci CPU time pt user,adica procesul<->shelul curent , este timpul total rezultat in 
> urma
> adunarii timpului in care este executata fiecare intructiune (80x86) din procesul 
> curent.
> T_total=t_instructiune_1+t_instructiune_2+...+t_instructiune_n si instructiune_i 
> apartin
> exclusiv procesului curent.

Si instructiunilor pe care le executa kernelul pentru procesul curent.

> Cand T_total>T_Hard_limit prcocesul primeste SIGKILL 
> Corect ?

Cam asa.


--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui