У меня есть сценарийубить фоновый процесс, выполняемый питоном
import os
os.system('python manage.py runserver')
Скрипт запускается сервер Джанго (независимо от того, что он делает, он не может быть любой командой, которая не оценивает до ctrl+c
или другого сочетания клавиша нажата).
Я хочу остановить сервер каким-либо образом, но не убить его pid.
Что я пробовал:
Я пытался использовать subprocess
LIB и это kill
команда, как описано здесь: How to terminate a python subprocess launched with shell=True
Но это не помогает. Как я думаю, причина в том, что мы убиваем не процесс manage.py runserver
, а процесс, который оценивает python manage.py runserver
. Итак, после процесса убийства сервер все еще работает.
Также я пытался использовать terminate
метод:
p = subprocess.Popen('python manage.py runserver', stdout=subprocess.PIPE, shell=True)
time.sleep(5)
p.terminate()
Как я думаю, что он должен работать следующим образом: сервер запускается и через 5 секунд он останавливается, но она никогда не останавливается.
Есть ли способ убить процесс?
Вы создали новую группу процессов в качестве ответа от вопроса, который вы связали, рекомендует? 'runningerver' не демонизирует серверный процесс, поэтому рецепт должен работать. – jfs
не используйте 'stdout = PIPE', если вы не читаете из трубы. Используйте [DEVNULL вместо этого, если вы хотите отменить вывод] (http://stackoverflow.com/q/11269575/4279) – jfs
Большое вам спасибо! Я только что попробовал повторить ответ из вопроса, который я связал, и ... все работает. Я не знаю, почему он не работал в первый раз, но теперь он делает именно то, что я хочу. Спасибо за то, что вы снова указали мне на этот вопрос и поблагодарили за DENVULL (нежелательный результат был моей второй проблемой). – imkost