Как указывало Tsf , проблема связана с ошибкой в ядре 2.6.28 .
Я оставляю свой первоначальный ответ, потому что думаю, что он может быть полезен в любом случае.
Из справочной страницы ulimit
-t The maximum amount of cpu time
in seconds.
В отношении ulimit учитывается только Процессорное время .
Попробуйте запустить вашу программу так:
time myprogram
Это покажет вам, сколько процессорного времени он реально использует.
Я подозреваю, что ваш бесконечный цикл содержит sleep()
и время ожидания не влияет на процессорное время процесса.
Это убивается через одну секунду:
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
Измерьте время процессора следующим образом ...
me@host:~$ time for (( i=1; i<5; i++ )); do sleep 1; done
... и через 5 секунд ...
real 0m4.008s
user 0m0.000s
sys 0m0.012s
... используется только 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