Многопроцессорность Python и независимость дочерних процессов
В терминале python я запускаю команду, подобную следующей, чтобы запустить длительный дочерний процесс:
from multiprocessing.process import Process
Process(target=LONG_RUNNING_FUNCTION).start()
Эта команда возвращается, и я могу делать другие вещи в терминале python, но все, что печатает потомок, все еще печатается в моем сеансе терминала python.
Когда я выхожу из терминала (либо сexit
или жеCTRL+D), команда выхода это зависает. Если я ударилCTRL+C во время этого зависания дочерний процесс завершается.
Если я убью процесс терминала Python вручную (через posixkill
команда), дочерний процесс вместо этого становится осиротевшим и продолжает работать с его выходом, предположительно отброшенным.
Если я запускаю этот код сpython -c
, он ждет, чтобы ребенок закончил, иCTRL+C убивает и родителя и ребенка.
Какие конфигурации запуска Python убивают детей, когда родители увольняются? В частности, если веб-сервер python-mod_wsgi-apache порождает дочерние процессы и затем перезапускается, убиваются ли эти дети?
[Кроме того, как правильно отделить дочерние процессы, порожденные от терминала? Есть ли способ более элегантный, чем следующий:Умышленно сделать сиротский процесс в Python ]
Обновить: подпроцессы Python, порожденныеmultiprocessing.Process
веб-сервером, работающим под Apache,не убит при перезапуске apache.