在node.js中是否有来自child_process.spawn的stdout竞赛?

时间:2012-10-14 23:49:25

标签: node.js race-condition spawn

我正在使用node.js来spawn子进程并使用child.stdout.on('data')挂钩消耗其输出。

child.stdout本身就是一个流,在streams page上,我注意到一个很大的警告,告诉我如果在数据事件到来时没有注册处理程序,那么数据就会丢弃在地板上。

我的子进程的生成和我的stdout处理程序的注册之间有一个短暂的时刻。 这里是否存在竞争条件?我不希望我的第一次阅读失败。

猜测父和子之间的管道会缓冲,但节点是否保证它是合理的?

1 个答案:

答案 0 :(得分:2)

你必须在同一个(一系列串行语句)中调用child.stdout.on('data', [...])后者作为child_process.spawn([...])调用,以确保在IO操作时监听器在那里接下来处理。或者您可以暂停流child.stdout.pause()(在同一回合中)并在添加侦听器之后在后一轮中恢复它,如果有必要在后一轮安装侦听器。