所以我对process.stdout.write
/process.stderr.write
process.stdout.write/process.stderr.write猴子补丁的作品在孩子的过程,但不是父
const strm = fs.createWriteStream(logfile);
const stdoutWrite = process.stdout.write;
process.stdout.write = function() {
strm.write.apply(strm,arguments);
stdoutWrite.apply(process.stdout, arguments);
};
这个简单的猴子补丁(用于process.stderr,它的相同,并写入相同的流)。
问题:
当我运行node x.js
流这个过程结束之前不会完成所有的写作,甚至还没有接近。 但是,如果我跑
$ node y.js # this runs x.js in child process
现在的孩子跑将完成写入和日志文件中的流已满。
为什么会这样?在使用fs.appendFileSync
之后,有没有一种方法可以确保流程在流程关闭之前流失?
编辑:
我想我知道为什么它的发生 - 我打电话process.exit()
这将过早闭合的过程中,流结束之前可能会被调用。
有没有一种方法可以监听流完成写入的时间?如果调用process.exit()时,在流上调用finish()时,似乎是人为的“完成”。我试图等待'流失'事件,但它似乎永远不会开火。