Обработка нескольких SIGCHLD

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

При использовании обработчиков сигналов для сигналов не в реальном времени, когда обработчик сигналов работает для конкретного сигнала, дальнейшее появление того же сигнала должно быть заблокировано, чтобы избежать попадания в рекурсивные обработчики. Если в это время поступает несколько сигналов, ядро ​​вызывает обработчик только один раз (когда сигнал разблокирован).

Такое же поведение при использовании signalfd () ? Поскольку обработка на основе signalfd не имеет типичных проблем, связанных с асинхронным выполнением обычных обработчиков сигналов, я думал, что ядро ​​может поставить в очередь все дальнейшие появления SIGCHLD ]?

Кто-нибудь может прояснить поведение Linux в этом случае ...

21
задан alk 27 June 2016 в 05:29
поделиться