Обработчик сигнала вызывается один раз за процесс - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть программа, которая порождает несколько процессов, и я убиваю ее с помощью Ctrl + C.

В начале программы я перехватываю сигнал, чтобы выполнить некоторые операции очистки.

def cleanup(*_):
    # do cleanup operations here
    # ...
    exit(1)

# trap ctrl+c and hide the traceback message
signal(SIGINT, cleanup)

# spawn processes (pool of workers) and do work here
# ...

Проблема в том, что cleanup вызывается несколько раз (по одному разу для каждого запущенного процесса).

Как мне сделать так, чтобы cleanup вызывался только один раз?

1 Ответ

1 голос
/ 01 апреля 2019

Ваши дочерние процессы наследуют обработчик сигнала от своего родителя.Если вы хотите, чтобы обработчик выполнялся только в одном процессе, вы можете отменить регистрацию обработчика в дочерних процессах.

...