powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тестирование решений (спортивное программирование)
9 сообщений из 9, страница 1 из 1
Тестирование решений (спортивное программирование)
    #38442328
aybek_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Начал писать архив задач, с проверяющей системой.
И конечно сначала, все начинается хорошо, потом появляются проблемы.

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

Когда пользователь дает программе код решения и указывает на задачу, которую решил, программа:
компилирует код в /tmp
Для всех i
запускает программу перенаправив на ввод i-й тест и перенаправив вывод проги в файл /tmp/file.out
сравнивает /tmp/file.out с файлом правильного ответа и выдает вердикт.

Но вот проблема.
Если вдруг дается код где содержится, например, конструкция бесконечного цикла, программа виснет и не завершается.
Требуется решить эту проблему. А точнее. Как запустить еще один процесс и управлять им?
Или как завершить прогу пользователя, если он работает больше фиксированного времени?
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442338
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, парень. Бесконечный цикл это очень печально. Но я думаю что введение в этот цикл
условия выхода решит твою проблему. Ну ... хотя-бы часы проверять. Или количество итераций.
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442371
aybek_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

видно, я не очень хорошо объяснил все, извините. Все дело в том что мы не можем редактировать код, который дал нам пользователь. Наша задача его скомпилировать, запустить на тестах и сказать ему о результатах, ок, это все да, сделано.
Но вот бывают случаи когда, человек допустил ошибку, отправил код с бесконечным циклом, или написал неэффективный
алгоритм, в этом случае мне лишь нужно убить тот процесс и сказать об этом юзеру, но я не знаю как. Конечно можно
зафиксировать время когда программа запустилась, потом если прошло больше времени с помощью system вызвать kill что ли.
Но это неэффективно, и вообще систем приостанавливает процесс который его запустил.
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442382
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aybek_это неэффективно, и вообще систем приостанавливает процесс который его
запустил.
Во-первых, kill можно вызвать и без system.
Во-вторых, для этого и существуют fork() и exec*() функции.

Ты бы хоть книжки почитал прежде чем за дело браться или на форум лезть... Рочкинда,
например...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442398
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aybek_Конечно можно
зафиксировать время когда программа запустилась, потом если прошло больше времени с помощью system вызвать kill что ли.

У тебя другого выхода нет. Запускай бинарь через system() или fork(). Засекай лимит времени (5-10 минут) и прибивай
процесс если он еще не завершился.

Но это неэффективно, и вообще систем приостанавливает процесс который его запустил.
Что неэффективно? Почему? Кто кого останавливает?
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442428
aybek_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но это неэффективно, и вообще систем приостанавливает процесс который его запустил.
Что неэффективно? Почему? Кто кого останавливает?[/quot]

ну system времмено приостанавливает выполнение запустившей ее программы чтобы обработать.
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442430
aybek_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы хоть книжки почитал прежде чем за дело браться или на форум лезть... Рочкинда,
например...


а можно подробнее о книжке?
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442707
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aybek_Но это неэффективно, и вообще систем приостанавливает процесс который его запустил.
Что неэффективно? Почему? Кто кого останавливает?

ну system времмено приостанавливает выполнение запустившей ее программы чтобы обработать.[/quote]

не system, а wait()/waitpid().
не хочешь ждать завершения процесса-не жди.
делай без system через fork() + exec()
...
Рейтинг: 0 / 0
Тестирование решений (спортивное программирование)
    #38442709
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aybek_Ты бы хоть книжки почитал прежде чем за дело браться или на форум лезть... Рочкинда,
например...


а можно подробнее о книжке?

man 2 wait
man 2 fork
man 2 execve
man 3 system
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тестирование решений (спортивное программирование)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]