I think you're talking about Worse is Better: http://www.jwz.org/doc/worse-is-better.html
> There's no good reason to be catching synchronous signals in modern code
In libraries you can never know what the main program will do, and who wants to write a library that says "this library will malfunction if you use OS feature X"?
> See signalfd() et. al.
That's very cool, I had not seen that! But it's Linux-specific.
Not really the real point of the essay, but yeah there kind of is. Now come with a design (with similar premices, you can't just argue that the whole system call semantic has to change...) which does not involve the user, and we will talk.
Though I'm curious why you're wanting to trying to interrupt those syscalls. In particular, why are you waiting on a process that you don't know is already dead? That's what SIGCHLD is for. And the only case I can think of for a blocking open() is a network/fuse mounted file. In which case the filesystem will surely eventually return an error (and if it doesn't no amount of voodoo in your application logic is going to correct the bugs in the underlying system).
There's no good reason to be catching synchronous signals in modern code[1]. See signalfd() et. al.
[1] Well, except for things that can only be delivered synchronously like SIGSEGV for user-handled paging. But that's complicated enough that the extra complexity of handling a SIGSEGV delivered out of a syscall is probably tolerable.