When using `mpirun`, is it possible to catch signals (for example, the SIGINT generated by `^C`) in the code being run?

For example, I'm running a parallelized python code. I can `except KeyboardInterrupt` to catch those errors when running `python blah.py` by itself, but I can't when doing `mpirun -np 1 python blah.py`.

~~Does anyone have a suggestion? Even finding how to catch signals in a C or C++ compiled program would be a helpful start.~~

If I send a signal to the spawned Python processes, they can handle the signals properly; however, signals sent to the parent `orterun` process (i.e. from exceeding wall time on a cluster, or pressing control-C in a terminal) will kill everything immediately.