我在SO上发现了这个问题,但没有找到任何好的答案。
我正在使用节点0.10.40。
我正在使用child_process.execFile
生成子进程,在此过程中,我正在使用fs.writeFile
进行一些文件I / O.但是,在process.exit(0)
的回调执行或filo I / O完成之前,该进程将以fs.writeFile
退出。
关于如何延迟退出而不是 setTimeout
的流程的任何想法。我不想要使用超时,因为如果我这样做,我也可以使用fs.writeFileSync
。有没有人找到解决这个问题的方法?
[编辑]
简单地将process.exit(0)
放在fs.writeFile的回调中并不是我在这里寻找的因为考虑这种情况:
您有一个产生子进程的程序。在这些子进程中,您执行HTTP请求,转储数据包数据,对数据包数据执行逻辑,然后终止进程
所以基本上将process.exit(0)
放在writeFile
的回调中,当你子进程执行的唯一事件就是这个文件I / O时。但是在更大的范围内,如果您真的想在此过程中执行相当数量的逻辑并且不时“转储”信息,则这将不起作用。 此过程的“生命周期”不依赖于文件I / O 。它取决于您对数据包数据执行的逻辑。在这种情况下,转储更多用于回顾和调试。
答案 0 :(得分:3)
您只需要确保在process.exit();
的回调中呼叫fs.writeFile
,例如:
文件index.js:
var child_process = require('child_process');
child_process.exec('node b.js', function(error, stdout, stderr){
console.log(stdout);
});
文件b.js:
var fs = require('fs');
var count = 0;
function ret(aux){
count++;
if(count==4){
console.log("done i/o operation");
count = 0;
process.exit();
}
}
fs.writeFile('message.txt', 'writing something...', 'utf8', ret);
fs.writeFile('message.txt', 'writing something...', 'utf8', ret);
fs.writeFile('message.txt', 'writing something...', 'utf8', ret);
fs.writeFile('message.txt', 'writing something...', 'utf8', ret);
编辑:
我在评论中提到了多个I / O调用,基本上,您可以计算调用回调的次数,当它达到预定义值时,您调用process.exit();