node.js中是否存在使用child_process.spawn标准输出的种族?

node.js中是否存在使用child_process.spawn标准输出的种族?,node.js,race-condition,spawn,Node.js,Race Condition,Spawn,我使用node.js访问子进程并使用其输出,使用child.stdout.on('data')hook child.stdout本身就是一个流,在屏幕上,我注意到一个fat警告,通知我如果在数据事件到达时没有注册处理程序,那么数据就会被扔到地板上 在生成子进程和注册stdout处理程序之间有一段短暂的时间这里有比赛条件吗?我不想丢失我的第一次阅读 有理由猜测父级和子级之间的管道会缓冲,但node能保证缓冲吗?您必须调用child.stdout.on('data',[…])后一步(一系列串行语句)

我使用node.js访问子进程并使用其输出,使用
child.stdout.on('data')
hook

child.stdout
本身就是一个流,在屏幕上,我注意到一个fat警告,通知我如果在数据事件到达时没有注册处理程序,那么数据就会被扔到地板上

在生成子进程和注册stdout处理程序之间有一段短暂的时间这里有比赛条件吗?我不想丢失我的第一次阅读


有理由猜测父级和子级之间的管道会缓冲,但node能保证缓冲吗?

您必须调用
child.stdout.on('data',[…])
后一步(一系列串行语句)作为
child\u进程。spawn([…])
调用以确保下次处理IO操作时侦听器在那里。或者您可以暂停流
child.stdout.pause()
(在同一回合中),并在添加侦听器后的回合中恢复它(如果需要在后一回合中安装侦听器)。

在调用
spawn
的回合结束之前,节点不会实际生成我的子进程吗?否,实际上,它会立即生成它,但在该转换结束之前,不会发生回调,例如
stdout
的输出流对数据接收的回调。@DanD。你有关于“转向”概念的文档链接吗?我在Google或node source上找不到它。我不明白这些“转折点”是什么。当我使用调试器逐步检查代码时,我发现只要执行
const x=spawn(…)
语句,
x.pid
就是一个有效的进程ID(至少在Windows上是如此)。当然,Node只能控制它的线程模型,
cmd.exe
或者我生成的任何东西都不会关心事件循环。由于
x.stdout
另外也已经处于流动模式,这会导致我感兴趣的所有输出泄漏出去。@AsadSaeeduddin JavaScript实际上调用这些“turns”:。但我认为类比游戏回合更合适。示例显示了正确的用法。如果您的代码看起来像那样,但仍然无法工作,请提出一个问题。