Как убить дочерние процессы и процессы внуков, контролируемые супервизором

В процессе, контролируемом 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 ответ

У вас есть пара вариантов:

  1. Измените ваши программы на Python так, чтобы, когда они получают такие сигналы, как SIGTERM они распространяют их среди детей в явном виде.

  2. Включить supervisord опции stopasgroup а также killasgroup, Эти параметры задокументированы как отправка сигналов всей группе процессов, а не только одному процессу.

Другие вопросы по тегам