--- Adrian Popescu <[EMAIL PROTECTED]> wrote:
> On Tuesday 01 June 2004 07:51, Alin Nastac wrote:
> > costin wrote:
> > >$ulimit -t 10;/usr/bin/time --verbose sleep 15
> > >.......
> > > Elapsed (wall clock) time (h:mm:ss or m:ss): 0:15.02
> > >.......
> > >$ulimit -a
> > >....
> > >cpu time             (seconds, -t) 10
> > >.....
> > >
> > >Dureaza mai mult de 10 secunde si nu e intrerupta.
> > >Unde e greseala ?
> >
> > 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.
> >
> 
> Timpul de executie al programului , difera de timpul de utilizare CPU.
> Chiar exemplul de mai sus ; in interval de 15 sec , se executa
> numai cateva instructiuni pe procesor, care "intuitiv" sunt de ordinul 
> msec.  (depinde si de procesor)
> (oricum, in interval de 1 sec ruleaza mai multe procese ;
> de aia se chema multi-tasking , si process scheduling :-)
> 
> $time sleep 15
> real    0m15.005s ( ruleaza 15 sec)
> user    0m0.001s  (timp utilizare CPU)
> sys     0m0.003s
> 
> 
> --- 
> Detalii despre listele noastre de mail: http://www.lug.ro/
> 
> 

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 ?

In exemplu 

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

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
$

ulimit -t 5 
while true ; do read ;done #nu e afectat de loc
aa
aaa
aaa
aaa
aaa
aa
while true ; do echo aa;done #xterminaulul dispare pana la urma 
aaa

Din man setrlimit
                                                                                
       resource must be one of:
                                                                                
       RLIMIT_CPU
              CPU  time  limit  in seconds.  When the process reaches the soft
              limit, it is sent a SIGXCPU signal.  The default action for this
              signal  is to terminate the process.  However, the signal can be
              caught, and the handler can return control to the main  program.
              If  the  process  continues to consume CPU time, it will be sent
              SIGXCPU once per second until the  hard  limit  is  reached,  at
              which  time  it  is  sent SIGKILL.  (This latter point describes
              Linux 2.2 and 2.4 behaviour.  Implementations vary in  how  they
              treat  processes which continue to consume CPU time after reach-
              ing the soft limit.  Portable applications that  need  to  catch
              this  signal  should  perform  an orderly termination upon first
              receipt of SIGXCPU.)
                                                                                
Procesul primeste in cele din urma SIGKILL dupa ce depaseste CPU time . 

> > 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.

Cand T_total>T_Hard_limit prcocesul primeste SIGKILL 
Corect ?


        
                
__________________________________
Do you Yahoo!?
Friends.  Fun.  Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/ 

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


Raspunde prin e-mail lui