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