Certain signals are true user-mode interrupts, like SIGTERM and some of the ones glibc uses to implement pthreads.

The ones related to application logic must only be handled with signalfd if you want any semblance of reliability.