I'm not 100% sure that's correct.  I think it needs to take the return value of uv_run() into account in case it starts handles, i.e. that it should look like this:

```diff
diff --git a/src/node.cc b/src/node.cc
index 0a9a0cd..555d734 100644
--- a/src/node.cc
+++ b/src/node.cc
@@ -3536,7 +3536,8 @@ int Start(int argc, char** argv) {
       more = uv_run(env->event_loop(), UV_RUN_ONCE);
       if (more == false) {
         EmitBeforeExit(env);
-        more = uv_run(env->event_loop(), UV_RUN_NOWAIT);
+        more = uv_loop_alive(env->event_loop());
+        more = uv_run(env->event_loop(), UV_RUN_NOWAIT) || more;
       }
     } while (more == true);
     code = EmitExit(env);
```

(No idea why GitHub is mangling the diff like that.)