launchProcess, which underlies runProgram, in the shell calls quickExit after a fork if it fails to dup fds or if the exec fails. This means that some atexit handlers will be called incorrectly.
In particular, this triggers the leak checker, which we didn't intend to run as a result of runProgram.