2009-06-09 2 views
3

Я хочу ограничить время выполнения программы, которую я запускаю под Linux. Я положил в моем Scons сценарии строки:Команда scons с ограничением по времени

Command ("ком", "", "ULIMIT -t 1; MyProgram")

и протестировал его с программой бесконечного цикла: он не сделал работа и программа выполнялись навсегда.

Я что-то упустил?

- TSF

ответ

4

ulimit -t 1 означает, что предел установлен на 1 секунду времени центрального процессора. Если ваша программа бесконечного цикла использует любой вид sleep во внутреннем цикле, то она будет практически не использовать процессорное время. Это означает, что он не будет убит за 1 секунду реального времени в часы. На самом деле для его распределения в 1 секунду может потребоваться несколько минут или часов.

Что произойдет, если вы запустите команду вне SCons? Возможно, у вас нет разрешения на изменение лимита на все ...

ulimit -t 1; ./myprogram 

Например, он может сказать следующее, если лимит уже установлен в 0:

bash: ulimit: cpu time: cannot modify limit: Operation not permitted 

Edit: это похоже the -t option is broken on Ubuntu 9.04. Исправление было совершено 05 июня 2009 года, но может потребоваться некоторое время, чтобы просачиваться в обновления - это может быть не исправлено до 9.10.

В качестве исторической заметки эта проблема больше не существует в Ubuntu 10.04.

+0

Моя программа бесконечный цикл был что-то вроде (в C): в то время как (1) х = 1; так, чтобы в нем не было сна. - tsf – Tsf

+0

Кажется, что это не проблема СОН! Я пробовал ulimit -t 1; ./myprogram Он работал (был прерван) под установку Linux Fedora, но не работал под Ubuntu. Я должен проверить, зависит ли это от некоторого значения конфигурации. Спасибо! – Tsf

+0

Ах! Я пробовал это на openSuse, и это сработало. На Убунту ... ничего. Нет ошибки, но не убить через 1 секунду. – richq

Смежные вопросы