slav0nic
Сен. 27, 2012 13:07:23
Если для вашей задачи достаточно subprocess, то им и пользуйтесь
plusplus
Сен. 27, 2012 20:14:53
А каким образом может потом прибить скрипт, который я запустил через subprocess? Средства обычной остановки я придумаю, а если его всё-таки надо будет принудительно умертвить в аварийных ситуациях? Запомнить его pid, сохранить где-нибудь и потом послать ем kill? Я погуглил, насчет kill процесса там сплошные костыли, вплоть до вызывания команд ps и kill средствами python через тот же subprocess. Более менее понятно с celery, создал task, запомнил его id, в любой момент нашел таск по id и остановил. Но насчет celery уже передумал, да и установка у него не “в два клика”.
slav0nic
Сен. 28, 2012 03:49:09
os.kill() как-бы с SIGTERM и его корректная обработка в скрипте, или SIGKILL для “аварийного”
это не костыль, а основные принципы работы posix систем
plusplus
Сен. 28, 2012 15:18:08
Проблема возникла, процесс запущенный с помощью subprocess.Popen я не могу прибить ни средствами Питона: os.kill(pid, signal.SIGKILL), ни через shell Linux. Подскажите как быть? Может процесс как-то не так запускаю?
p = subprocess.Popen([sys.executable, 'tasks.py'])
slav0nic
Сен. 29, 2012 13:54:08
может не тот pid?) код показывай
plusplus
Сен. 29, 2012 17:35:15
slav0nic
может не тот pid?) код показывай
Код запуска процесса я показал. Этот процесс я не могу убить из консоли! пишу kill -9 pid(12312, например), а процесс остается жив. Если я выключаю тестовый сервер manage.py, то процесс пропадает. Вот в принципе можно начать с этого=). А через питон убить я его пытался как-то так:
os.kill(settings.pid, signal.SIGKILL)
slav0nic
Сен. 29, 2012 23:28:36
SIGKILL не перехватывается, выполняется на уровне ОС, то есть процесс отстрелится должен, не важно на чём и как писан получатель сего сигнала …