3a5217d722
The prior workaround to avoid truncated pending stdout writes, it turns out, doesn't actually work. (Piping output leads to more buffering and asynchrony, and turned up additional problems.) Digging through some GitHub issues led me to these "best practices": https://nodejs.org/api/process.html#process_process_exit_code The reason this is problematic is because writes to process.stdout in Node.js are sometimes non-blocking and may occur over multiple ticks of the Node.js event loop. Calling process.exit(), however, forces the process to exit before those additional writes to stdout can be performed. Rather than calling process.exit() directly, the code should set the process.exitCode and allow the process to exit naturally by avoiding scheduling any additional work for the event loop. This change adopts this part of the best practices, by simply setting exitCode upon normal termination and letting the event loop quiesce. Note that I am still not obeying the other part of the guidance: If it is necessary to terminate the Node.js process due to an error condition, throwing an uncaught error and allowing the process to terminate accordingly is safer than calling process.exit(). Somewhat confusingly, writes to process.stderr do not suffer from these same problems, because writes to stderr are synchronous. We prefer to tear down the process gracefully, without an unhandled exception, and we are okay losing some stdout writes as a result, given that all error- related ones will have gone to stderr. |
||
---|---|---|
.. | ||
index.ts |