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/
