I know it's just an example, but if you're on linux there's signalfd() which makes signals into IO so you can handle it in an epoll()-loop or whatever way you like doing IO
We can't remove the old way of course, as that would break things, but that doesn't stop improvements