Listening to standard input
While playing with input peripherals when developing the Quinix
virtual machine I came across an oddity: if you start listening
to stdin
, your program will never terminate of its own accord,
even if you stop listening:
const l = (e) => {
console.info('hey, ', e.toString('utf-8'), '!');
process.stdin.off('data', l);
};
process.stdin.on('data', l);
process.stdout.write('hi> ');
To run the above, toss it in a file listen.js
and run it with node listen.js
.
Normally once there’s nothing else “going on” in your Node program,
it will exit. For instance, if you set a timeout for a few seconds later
(at which point you print a message) and then “fall off the end”, your program will
indeed wait a few seconds, print a message, and then exit. But if you start
listening to stdin
, that “automatic exit” once everything else is done
doesn’t happen. I don’t know why; do you?