signalfd() misses signals

If multiple standard (that is: non real time) signals are pending for a process, the OS might decide to merge several signals of the same type into one.

From POSIX:

2.4.1 Signal Generation and Delivery

[...]

If a subsequent occurrence of a pending signal is generated, it is implementation-defined as to whether the signal is delivered or accepted more than once in circumstances other than those in which queuing is required.

Standard signals are not queued by default. The only way to have a standard signal queued is by issuing them using sigqueue().

Tags:

Linux

C

Signals