ulimit -t под Ubuntu - PullRequest
       46

ulimit -t под Ubuntu

9 голосов
/ 11 июня 2009

Я использую Ubuntu Linux (2.6.28-11-generic # 42-Ubuntu SMP пт. 17 апреля 01:57:59 UTC 2009 i686 GNU / Linux) и похоже, что команда "ulimit -t" не работает должным образом. Я побежал:

ulimit -t 1; MyProgram

где myprogram - бесконечный цикл. Я ожидал, что программа будет прервана через 1 секунду, но она не остановилась. Я попробовал то же самое на установке Linux Fedora, и она работала, как и ожидалось.

Есть ли какая-либо конфигурация, которая должна быть настроена для правильной работы?

- цф

1 Ответ

17 голосов
/ 11 июня 2009

Как указывало 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
...