By: Tom Sydney Kerckhove <syd@cs-syd.eu>
mutation: swallow ECHILD in stopProcess cleanup waitExitCode reaps the child when it exits naturally, but bracket's cleanup then runs stopProcess which also tries to waitForProcess on the already-reaped pid and throws 'waitForProcess: does not exist (No child processes)'. The exception propagates out of mapConcurrently and crashes the whole harness after the first naturally-exiting mutation child. Swallow that specific cleanup-time IOException. The bracket is there to guarantee SIGTERM on the timeout-wins branch and on async exceptions; when the child has already exited, there is nothing left to clean up.