С питона терминалом, я запускать некоторые команды, как в следующем, чтобы породить длительный процесс ребенка:Python многопроцессорных и независимость детей процессы
from multiprocessing.process import Process
Process(target=LONG_RUNNING_FUNCTION).start()
Этой команду возвращает, и я могу делать другие вещи терминал python, но все, что печатается дочерним, все еще печатается на моем сеансе терминала python.
Когда я выйти из терминала (либо с exit
или CTRL +D), команды выхода он висит. Если я ударил CTRL + C Во время этого зависания дочерний процесс завершается.
Если я закрою процесс терминала python вручную (через команду posix kill
), то дочерний процесс становится сиротой и продолжает работать с выводом, который предположительно будет отброшен.
Если я запускаю этот код python -c
, она ждет ребенка, чтобы прекратить, и CTRL +C убивает обоих родителей и ребенка.
Какие запущенные конфигурации python убивают детей, когда родители прекращаются? В частности, если веб-сервер python-mod_wsgi-apache порождает дочерние процессы, а затем перезапускается, убиты ли дети?
[Как в стороне, какой способ отсоединения дочерних процессов от терминала? Есть ли способ более элегантно, чем следующее: Deliberately make an orphan process in python]
Update: питона подпроцессы порождали с multiprocessing.Process
на веб-сервере под управлением Apache являются не убит, когда апач будет перезапущен.
Подпроцесс - это мой ходячий модуль для диспетчеризации системных вызовов, но использование подпроцесса для запуска фоновых задач python представляется неуместным. Вы использовали хорошую библиотеку python-deamon (например, python-deamon)? – Zags
Различие фона/переднего плана зависит от управления заданиями в оболочке; не имеет смысла использовать эти термины в приложении для управления процессом в целом. В более общем контексте, демонанизация - это то, что процесс выполняет для себя, и использование 'subprocess.Popen' для запуска такого процесса является полностью стандартным. 'python-daemon' в порядке; он имеет громоздкий API, но это битва проверена, и последнее качество важно, так как это легко сделать неправильно. – Alp