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