This fixes a number of issues including deadlocks and leaking file descriptors due to not using `O_CLOEXEC`