所以我對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()時,似乎是人爲的「完成」。我試圖等待'流失'事件,但它似乎永遠不會開火。