Jak Tsf wskazał, że problem jest z powodu bug in kernel 2.6.28. Pozostawiam moją oryginalną odpowiedź, ponieważ uważam, że i tak może być pomocna.
Z podręcznika ulimit
-t The maximum amount of cpu time
in seconds.
Co liczy się w odniesieniu do ulimit jest tylko raz CPU. Spróbuj uruchomić program tak:
time myprogram
który pokaże Ci, jak dużo czasu procesora to rzeczywiście wykorzystuje.
Podejrzewam, że Twoja nieskończona pętla zawiera sleep()
, a czas uśpienia nie wpływa na czas procesora procesu.
ten ginie po jednej sekundzie:
[email protected]:~$ bash
[email protected]:~$ ulimit -t 1; for ((i=1; 1; i++)); do a=1; done
Killed
To wydaje się działać bez końca (ale oczywiście nie robi):
[email protected]:~$ bash
[email protected]:~$ ulimit -t 1; for ((i=1; 1; i++)); do sleep 1; done
mierzyć czas CPU tak ...
[email protected]:~$ time for ((i=1; i<5; i++)); do sleep 1; done
... i 5 sekund później ...
real 0m4.008s
user 0m0.000s
sys 0m0.012s
... tylko 12 ms czasu procesora.
Próbowałem go na Ubuntu Jaunty Jackalope (9.04)
Linux host 2.6.28-11-generiC#42-Ubuntu SMP
Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux
Nie sądzę, że należy na ServerFault. Co sprawia, że tak myślisz? –
Tak, masz rację, zareagowałem tak szybko –