Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
Добрый день. Начал писать архив задач, с проверяющей системой. И конечно сначала, все начинается хорошо, потом появляются проблемы. Что у меня есть? Что может программа сейчас? Программа содержит небольшой архив задач, и тесты на них, решение можно автоматически прогонять по тестам. Выдает вердикты. Когда пользователь дает программе код решения и указывает на задачу, которую решил, программа: компилирует код в /tmp Для всех i запускает программу перенаправив на ввод i-й тест и перенаправив вывод проги в файл /tmp/file.out сравнивает /tmp/file.out с файлом правильного ответа и выдает вердикт. Но вот проблема. Если вдруг дается код где содержится, например, конструкция бесконечного цикла, программа виснет и не завершается. Требуется решить эту проблему. А точнее. Как запустить еще один процесс и управлять им? Или как завершить прогу пользователя, если он работает больше фиксированного времени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 19:56 |
|
||
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
Да, парень. Бесконечный цикл это очень печально. Но я думаю что введение в этот цикл условия выхода решит твою проблему. Ну ... хотя-бы часы проверять. Или количество итераций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 20:34 |
|
||
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
mayton, видно, я не очень хорошо объяснил все, извините. Все дело в том что мы не можем редактировать код, который дал нам пользователь. Наша задача его скомпилировать, запустить на тестах и сказать ему о результатах, ок, это все да, сделано. Но вот бывают случаи когда, человек допустил ошибку, отправил код с бесконечным циклом, или написал неэффективный алгоритм, в этом случае мне лишь нужно убить тот процесс и сказать об этом юзеру, но я не знаю как. Конечно можно зафиксировать время когда программа запустилась, потом если прошло больше времени с помощью system вызвать kill что ли. Но это неэффективно, и вообще систем приостанавливает процесс который его запустил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 22:12 |
|
||
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
aybek_это неэффективно, и вообще систем приостанавливает процесс который его запустил. Во-первых, kill можно вызвать и без system. Во-вторых, для этого и существуют fork() и exec*() функции. Ты бы хоть книжки почитал прежде чем за дело браться или на форум лезть... Рочкинда, например... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 22:41 |
|
||
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
aybek_Конечно можно зафиксировать время когда программа запустилась, потом если прошло больше времени с помощью system вызвать kill что ли. У тебя другого выхода нет. Запускай бинарь через system() или fork(). Засекай лимит времени (5-10 минут) и прибивай процесс если он еще не завершился. Но это неэффективно, и вообще систем приостанавливает процесс который его запустил. Что неэффективно? Почему? Кто кого останавливает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2013, 00:26 |
|
||
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
Но это неэффективно, и вообще систем приостанавливает процесс который его запустил. Что неэффективно? Почему? Кто кого останавливает?[/quot] ну system времмено приостанавливает выполнение запустившей ее программы чтобы обработать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2013, 04:41 |
|
||
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
Ты бы хоть книжки почитал прежде чем за дело браться или на форум лезть... Рочкинда, например... а можно подробнее о книжке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2013, 04:42 |
|
||
|
Тестирование решений (спортивное программирование)
|
|||
|---|---|---|---|
|
#18+
aybek_Но это неэффективно, и вообще систем приостанавливает процесс который его запустил. Что неэффективно? Почему? Кто кого останавливает? ну system времмено приостанавливает выполнение запустившей ее программы чтобы обработать.[/quote] не system, а wait()/waitpid(). не хочешь ждать завершения процесса-не жди. делай без system через fork() + exec() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2013, 20:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38442707&tid=2019900]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
189ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 288ms |

| 0 / 0 |
