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));

*1:JSXはこのせいでWindowsでうまく動かないことがありました