Tsfが指摘したように、問題はカーネル 2.6.28 のバグによるものです。とにかく役立つと思うので、元の回答を残します。
ulimit マンページから
-t The maximum amount of cpu time
in seconds.
ulimit に関して重要なのは、CPU 時間のみです。次のようにプログラムを開始してみてください。
time myprogram
これにより、実際に使用されている CPU 時間が表示されます。
私の疑いは、無限ループが含まれてsleep()
おり、スリープ時間がプロセスの CPU 時間に寄与していないことです。
これは1秒後に殺されます:
me@host:~$ bash
me@host:~$ ulimit -t 1; for (( i=1; 1; i++ )); do a=1; done
Killed
これは永遠に実行されるようです (もちろんそうではありません):
me@host:~$ bash
me@host:~$ ulimit -t 1; for (( i=1; 1; i++ )); do sleep 1; done
このようにCPU時間を測定します...
me@host:~$ time for (( i=1; i<5; i++ )); do sleep 1; done
...そして5秒後...
real 0m4.008s
user 0m0.000s
sys 0m0.012s
...使用される CPU 時間はわずか 12 ミリ秒です。
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