I just pushed up a change to move the `exit(0)` into the `Launcher`. From testing it out, it allows you to send a USR1 followed by a TERM because the `wait` now happens async. Note that I updated the Interrupt handling to now do `launcher.async.stop` (which allows USR1 and TERM to share the same code path while not blocking each other). It appears to work AFAICT from testing it out.

I can't code more tonight but can finish up any other modifications you have tomorrow.