nodejsでprocess.exit()するとstdout/stderrのバッファがflush()されない件
この問題はnodejs 0.4.x ではMacOSXでも存在したようなのですが、0.6.xで修正されたようなので安心していたら、Windowsではまだ残っているようです*1。
以下のようにすれば、stdout/stderrr両方確実にフラッシュした後にexit()するようにできます。@mattn_jp++
var exitCode = main(); (function (exitCode) { if (exitCode === 0) { return; } var stdoutIsFlushed = process.stdout.write(""); var stderrIsFlushed = process.stderr.write(""); var exitIfFlushed = function () { if (stdoutIsFlushed && stderrIsFlushed) { process.exit(exitCode); } }; if (! stdoutIsFlushed) { process.stdout.on('drain', exitIfFlushed); } if (! stderrIsFlushed) { process.stderr.on('drain', exitIfFlushed); } exitIfFlushed(); }(exitCode));