В системе под управлением Linux 2.6.35+ моя программа создает множество дочерних процессов и контролирует их.Если дочерний процесс умирает, я делаю некоторую очистку и порождаю процесс снова.Я использую signalfd()
, чтобы получить сигнал SIGCHLD
в моем процессе.signalfd
используется асинхронно с использованием libevent
.
При использовании обработчиков сигналов для сигналов не в реальном времени, когда обработчик сигналов работает для определенного сигнала, дальнейшее появление того же сигнала должно быть заблокировано, чтобы избежатьпопасть в рекурсивные обработчики.Если в это время поступает несколько сигналов, то ядро вызывает обработчик только один раз (когда сигнал разблокирован).
То же самое происходит и при использовании signalfd()
?Поскольку обработка на основе signalfd
не имеет типичных проблем, связанных с асинхронным выполнением обычных обработчиков сигналов, я думал, ядро может поставить в очередь все дальнейшие вхождения SIGCHLD
?
Может кто-нибудь прояснить поведение Linux в этом случае ...