LINUX.ORG.RU

сприпт python прерывающий процесс через определенное время


0

0

Добрый день\утро\вечер, уважаемые товарищи.

Постараюсь ясно и лаконично изложить суть моего вопроса.

Я сейчас занимаюсь веб-проектом на тему олимпиадного(и не очень :)) программирования, суть его заключается в следующем: пользователь отправляет исходный код своей программы через форму на сервер, там он компилируется, прогоняется по тестам и на страницу выводит результат. Все бы хорошо, но только если кто-то в коде сделает бесконечный цикл, то наступает полная амба. Я долго откладывал решение этого вопроса, но теперь пришло время :).

Как вижу решение этого вопроса я: перед тем, как запускать исполняемый файл, запустить питоновский скрипт, который через несколько милисекунд сделает ps ax|grep *адрес исп. файла*(система - linux slackware) затем обработает полученные данные, выудит ID этого процесса и гупнет его. Не ругайтесь на меня сильно, если где-то туплю, потому что к изучению питона я приступил сегодня же.

В принципе, я могу реализовать все, кроме получения результата выполнения команды, потому что, как я прочитал здесь http://docs.python.org/lib/os-process.html execl не возвращает ничего..

Как мне решить этот вопрос? Буду благодарен любой помощи.

★★★
Ответ на: комментарий от polachok

Что-то мне подсказывает, что не спасет... :)

А вот что-то типа

=============

#!/bin/bash

emacs&

sleep 30

kill $!

=============

может и спасти... :) Впрочем, товарищу питон нужен, тут я не копенгаген...

Uncle_Theodore ★★
()
Ответ на: комментарий от Uncle_Theodore

Вместо имакса команду надо поставить. Это я экспериментировал, сорьки... :)

Uncle_Theodore ★★
()

А зачем велосипед? Есть же ejudge.

mo3r
()
Ответ на: комментарий от sdio

2polachok: нет, не спасет :) 2Uncle_Theodore: а я как раз не силен в языке баша.. Попробовал ваш вариант, ессно без имакса, но что-то как-то не прерывает, может я и не правильно что-то делаю. Все равно спасибо!

2mo3r&sdio: Извините за велосипец, я пользовался поиском и пытался найти то, что мне нужно, но не нашел. sdio, спасибо за тему, но я не смогу использовать описанные там команды и пакеты, потому что имею ограниченный доступ к серверу и мне нельзя там ничего устанавливать...

Но, насколько я понял, идея с питоном была ошибочной, надо все делать через баш, все спасибо.

gavlig ★★★
() автор топика
Ответ на: комментарий от cvv

Я таки справился с этой проблемой, если у кого-то возникнет такая же оставлю здесь скрипт, для истории, так сказать :) Отдельно благодарю за помощь товарища под ником kobra с иркового wenet.ru #slackware :)

gavlig ★★★
() автор топика
Ответ на: комментарий от gavlig

Я таки справился с этой проблемой, если у кого-то возникнет такая же - оставлю здесь скрипт, для истории, так сказать :) Отдельно благодарю за помощь товарища под ником kobra с иркового wenet.ru #slackware :)

prog="/путь/к/файлу"#
timetosleep="3"#сколько ждать
pids=$(pidof $prog)#находим айди процесса
test "${pids}" != "" && killall $prog#проверяем, если такой есть, то убить его.

Если что - я запускал его под debian 2.6.18-6-k7
have a nice day :)


gavlig ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.