Skip to content

Instantly share code, notes, and snippets.

@garthk
Created August 2, 2012 04:38
Show Gist options
  • Select an option

  • Save garthk/3233620 to your computer and use it in GitHub Desktop.

Select an option

Save garthk/3233620 to your computer and use it in GitHub Desktop.
Node.js does not detect process.stdout pipe closing
// this terminates: yes | head
// this hangs: node node-yes-simple.js | head
// per mhart, this is entirely expected
while(true) {
process.stdout.write('{"yes": "yes"}\n');
}
// Keep saying yes until interrupted or someone closes your output pipe:
var running = true;
function say_yes() {
if (running) {
process.stdout.write('{"yes": "yes"}\n');
process.nextTick(say_yes);
} else {
process.exit(0);
}
}
process.stdout.on('error', function(err) {
running = false;
if (err.code === 'EPIPE') {
// expected if output pipe closed, e.g. by `head`
process.exit(0);
} else {
process.stderr.write(JSON.stringify(err) + '\n');
process.exit(1);
}
});
@garthk
Copy link
Copy Markdown
Author

garthk commented Aug 2, 2012

Updated. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment