In my case I don't want it to ever interrupt the higher-priority "system" processes (event tickler, low space watcher, finalizer), but the "last" user process. Not quite sure how to determine that, though.
Crazy idea: On user interrupt, sample the system for 100 ms to see which process takes up so much time. Too crazy? ;)
But, IIUC, wouldn't such a sample would probably lead to the same answer (e.g., the finalization process), if that is the process that is consuming a lot at that moment..?
I don't quite remember the status of Igor's finalization enhancement in the image and VM - a simple pointer swap was able to take the place of full-enumeration of the finalization list. My gut tells me the support is in the Cog VM but that there might be some concurrent access issues on the image side..