Команда Scons с ограничением по времени - PullRequest
3 голосов
/ 10 июня 2009

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

Команда ("com", "", "ulimit -t 1; myprogram")

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

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

- цф

Ответы [ 2 ]

4 голосов
/ 10 июня 2009

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

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

ulimit -t 1; ./myprogram

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

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

Редактировать: похоже, опция -t не работает в Ubuntu 9.04 . Исправление было совершено 05 июня 2009 г., но для обновления может потребоваться некоторое время - оно может быть исправлено только до 9.10.

Как историческая справка, эта проблема больше не существует в Ubuntu 10.04.

0 голосов
/ 28 сентября 2011

Вы также можете использовать этот скрипт:

(взято из http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.mac.system/2005-12/msg00247.html)

#!/bin/sh
# timeout script
#
usage()
{
echo "usage: timeout seconds command args ..."
exit 1
}

[[ $# -lt 2 ]] && usage
seconds=$1; shift

timeout()
{
sleep $seconds
kill -9 $pid >/dev/null 2>/dev/null
}

eval "$@" &
pid=$!
timeout &
wait $pid
.
...