Лимит времени и памяти

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Лимит времени и памяти

Сообщение RickMan » 06.04.2013 20:37:37

Здравствуйте,
Как известно, на всех олимпиадах, при решении задач на паскале есть лимит времени и памяти, вот как его на линуке организовать?
У меня на данный момент система какая:
1) задача отправляется на сервер
2) компилируется
3) в папку с компилированнм файлом закидывается входной файл
4) запускается программа
5) проверяется выходной файл с оригиналом и вычисляется правильность ответа

но если дадут мне рекурсию зацикленную или еще что-то, то он будет её решать долго и счастливо... Заранее благодарю за ответ)
RickMan
незнакомец
 
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Re: Лимит времени и памяти

Сообщение absdjfh » 06.04.2013 20:51:35

4) запускается программа
как запускается? если пользоваться TProcess, то можно принудительно после завершения заданного времени вызывать Terminate (или Active := False), затем - проверку выходных файлов.
Это просто предположение.
absdjfh
новенький
 
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Re: Лимит времени и памяти

Сообщение RickMan » 06.04.2013 21:27:27

тестировщик у меня написан на php, поэтому я там через функцию shall_exec отправляю запрос в терминал на запуск откомпелированного файла... все это дело идет на линуксе...
RickMan
незнакомец
 
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Re: Лимит времени и памяти

Сообщение bormant » 07.04.2013 09:41:47

ID процесса вам возвращается? Сигнал о завершении процесса приходит? Если нет завершения процесса по истечении лимита времени, kill -9 $ID
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Лимит времени и памяти

Сообщение xdsl » 07.04.2013 11:24:00

Для проведения олимпиад в автоматизированном режиме рекомендую ejudge (http://ejudge.ru). Бесплатно, и на линуксе.
Там вопросы с памятью, временем, недопуском к файлам и т.п. решаются патчем ядра.

Добавлено спустя 2 минуты 40 секунд:
Вариант второй - принимать от олимпиадников только исходник функции, который встраивать в свой шаблон. В самом шаблоне - контролировать все параметры. Время контролируется легко, про объемы памяти - не знаю, вопросом таким не задавался.

Добавлено спустя 10 минут 51 секунду:
И еще. С зависаниями можно бороться с помощью сигналов от таймера, а также исполнением пользовательского кода в отдельном потоке или процессе.
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

Re: Лимит времени и памяти

Сообщение Devel0 » 07.04.2013 18:02:54

Ограничение времени: можно автоматически убивать процесс по истечении заданного времени:
Код: Выделить всё
( /путь/к/программе ) & sleep 5 ; kill $!

- взято из http://stackoverflow.com/questions/601543#637753.
По ограничению памяти - гуглятся разные варианты, например http://unix.stackexchange.com/questions/44985/limit-memory-usage-for-a-single-linux-process
Devel0
новенький
 
Сообщения: 66
Зарегистрирован: 24.07.2011 10:43:13


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru