This repository was archived by the owner on Apr 22, 2023. It is now read-only.
This repository was archived by the owner on Apr 22, 2023. It is now read-only.
console.error output not always flushed before process.exit #3479
Closed
Description
I have a simple node script that uses exec to run node scripts.
After adding process.exit(1) calls to the child, its console.error output sometimes goes missing.
// -------------------------------- missing-stderr-output.js
function has(arg) { return (process.argv.indexOf(arg)>-1) }
if (has('child')) {
// console.log('stdout');
console.error('stderr');
process.exit(1);
} else {
var cmd = has('simple')
? 'cat nothing'
: 'node missing-stderr-output.js child';
require('child_process').exec(cmd
,function(e,so,se){
console.log(e);
console.log(so);
console.log(se);
})
}
Note that calling the child code directly shows the stderr output, while calling the
child via .exec loses the child's stderr output.
$ node --version
v0.6.19
$ node missing-stderr-output.js child
stderr
$ node missing-stderr-output.js
{ [Error: Command failed: ] killed: false, code: 1, signal: null }
Note that calling another failing sub-process does not lose stderr output:
$ node missing-stderr-output.js simple
{ [Error: Command failed: cat: nothing: No such file or directory
] killed: false, code: 1, signal: null }
cat: nothing: No such file or directory
Uncommenting the console.log line sometimes outputs both stdout and stderr, sometimes still none.
All of this is on windows, in an msys shell.
As a workaround, replacing
process.exit(1)
with
process.on('exit',function(){process.exit(1)});
seems to work.