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