2016-06-07 process.exit() で stdout / stderr が flush されない bug をふんだ
2016-06-06 に書いた bouzuya/eater-b-reporter 。それをつくった際に踏んだ Node.js の bug (nodejs/node#6773) について書く。
これは process.exit()
された際に stdour/stderr が flush されない問題だ。eater-b-reporter では Error を表示した際に最後まで出力されることなく process が終了される形で起きた。
yosuke-furukawa/eater は Error がある場合に exit code 1 で終了させる。そのために process.exit(1)
を呼び出す。この process.exit(1)
が上記の bug により stdout/stderr に残った buffer を無視して終了させる。
現状、あまり良さそうな対策はない。上記 pull request にも挙がっている stdout/stderr を blocking する案 (nodejs/node#6456) を採ると、とりあえずは直せる。その特性からして効率は悪くなるだろうけど……。
bouzuya/eater-b-reporter は nodejs/node#6456 を npm package 化した yargs/set-blocking を使っている。Node.js の version が上がって直ってくれれば削除する予定だ。