I do not have a complete answer but a while ago I wanted to figure out where some signals were coming from. I patched the Linux kernel to log signals sent from one process to another.
If you feel like modifying the kernel (and you are using Linux) the code linked to below might help you get started.