Как убить дочерние процессы и процессы внуков, контролируемые супервизором
В процессе, контролируемом Supervisor, я разветвляю дочерний процесс
for i in xrange(MANAGER_PROCESS_NUM):
p = gipc.start_process(target=daemon_process, args=())
record.append(p)
for r in record:
r.join()
затем в каждом дочернем процессе я создаю процесс внука:
w = gipc.start_process(target=self._pool_worker, daemon=True)
Как убить все дочерние процессы и процессы внуков, когда я запускаю "supervisorctl stop xxx", чтобы остановить мой основной процесс?
1 ответ
У вас есть пара вариантов:
Измените ваши программы на Python так, чтобы, когда они получают такие сигналы, как
SIGTERM
они распространяют их среди детей в явном виде.Включить
supervisord
опцииstopasgroup
а такжеkillasgroup
, Эти параметры задокументированы как отправка сигналов всей группе процессов, а не только одному процессу.