Здравствуйте,
Как известно, на всех олимпиадах, при решении задач на паскале есть лимит времени и памяти, вот как его на линуке организовать?
У меня на данный момент система какая:
1) задача отправляется на сервер
2) компилируется
3) в папку с компилированнм файлом закидывается входной файл
4) запускается программа
5) проверяется выходной файл с оригиналом и вычисляется правильность ответа
но если дадут мне рекурсию зацикленную или еще что-то, то он будет её решать долго и счастливо... Заранее благодарю за ответ)
Лимит времени и памяти
Модератор: Модераторы
4) запускается программа
как запускается? если пользоваться TProcess, то можно принудительно после завершения заданного времени вызывать Terminate (или Active := False), затем - проверку выходных файлов.
Это просто предположение.
как запускается? если пользоваться TProcess, то можно принудительно после завершения заданного времени вызывать Terminate (или Active := False), затем - проверку выходных файлов.
Это просто предположение.
тестировщик у меня написан на php, поэтому я там через функцию shall_exec отправляю запрос в терминал на запуск откомпелированного файла... все это дело идет на линуксе...
ID процесса вам возвращается? Сигнал о завершении процесса приходит? Если нет завершения процесса по истечении лимита времени, kill -9 $ID
Для проведения олимпиад в автоматизированном режиме рекомендую ejudge (http://ejudge.ru). Бесплатно, и на линуксе.
Там вопросы с памятью, временем, недопуском к файлам и т.п. решаются патчем ядра.
Добавлено спустя 2 минуты 40 секунд:
Вариант второй - принимать от олимпиадников только исходник функции, который встраивать в свой шаблон. В самом шаблоне - контролировать все параметры. Время контролируется легко, про объемы памяти - не знаю, вопросом таким не задавался.
Добавлено спустя 10 минут 51 секунду:
И еще. С зависаниями можно бороться с помощью сигналов от таймера, а также исполнением пользовательского кода в отдельном потоке или процессе.
Там вопросы с памятью, временем, недопуском к файлам и т.п. решаются патчем ядра.
Добавлено спустя 2 минуты 40 секунд:
Вариант второй - принимать от олимпиадников только исходник функции, который встраивать в свой шаблон. В самом шаблоне - контролировать все параметры. Время контролируется легко, про объемы памяти - не знаю, вопросом таким не задавался.
Добавлено спустя 10 минут 51 секунду:
И еще. С зависаниями можно бороться с помощью сигналов от таймера, а также исполнением пользовательского кода в отдельном потоке или процессе.
Ограничение времени: можно автоматически убивать процесс по истечении заданного времени:
- взято из http://stackoverflow.com/questions/601543#637753.
По ограничению памяти - гуглятся разные варианты, например http://unix.stackexchange.com/questions/44985/limit-memory-usage-for-a-single-linux-process
Код: Выделить всё
( /путь/к/программе ) & sleep 5 ; kill $!- взято из http://stackoverflow.com/questions/601543#637753.
По ограничению памяти - гуглятся разные варианты, например http://unix.stackexchange.com/questions/44985/limit-memory-usage-for-a-single-linux-process
