NodeJS – 如何让亲生小孩与父母沟通?

我正在尝试这个:

var child = spawn('node', args, {cwd: parentDir, stdio: 'ipc'} ); 

(args是一个参数数组)

但它给出了以下错误:

TypeError:stdio选项的错误值:ipc

这实际上工作,所以这个问题似乎确实是stdio ipc参数:

 var child = spawn('node', args, {cwd: parentDir} ); 

这也适用:

  var child = spawn('node', args, {cwd: parentDir, stdio: 'pipe'} ); 

我读了这个: http : //nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options,但我不明白我要去哪里错了。 这是我第一次尝试使用这个NodeJSfunction,所以我很抱歉,如果问题是明显的。

也许还有其他方法可以解决这个问题。 孩子必须产卵,而不是分叉,我只是希望能够从孩子发送消息给父母。

谢谢!!

编辑:我有节点v0.8.18。 我search了IPC http://nodejs.org/changelog.html的版本历史logging,search词“IPC”没有任何内容,这让我觉得我需要一个更新版本的NodeJS。

根据我的几次轻推,Rockamic回答了他自己的问题。 这是什么工作和为什么:

  var child = spawn('node', args, {cwd: parentDir, stdio: [null, null, null, 'ipc']} ); 

指定标准input,标准输出,标准错误,因为null表示默认…

如果rockamic回来,并提供自己的答案,我会很乐意删除这个,所以他可以得到接受的答案。

这是一个完整的例子,与其他答案略有不同:

parent.js

 spawn('node', ['child.js'], { stdio: ['inherit', 'inherit', 'inherit', 'ipc'], }).on('message', function(data) { console.log(data); }); 
  • 孩子与父母有同样的权利。
  • inherit是用来共享相同的stream(如stdout )与孩子,所以你可以看到你的控制台中的东西,例如。

child.js

 process.send && process.send('hello parent'); 
  • 如果您要直接使用相同的代码,该函数将不可用(这将是undefined ),所以您需要首先检查。

尝试:

 var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: 'ipc'} ); 

(添加括号到你的arg应该是一个数组),看看是否会改变你的错误 –

如果不是,也许

 var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: ['pipe', 1, 2, 'ipc']} ); 

你可能想要改变'pipe道',或地址的标准输出以及…不知道你真的想在这里。

最后,这似乎是一个很好的职位,以帮助您获得一些观点。 标题看起来不太合适,但是如果您阅读代码中发生的事情,我认为这会有所帮助:

http://blog.trevnorris.com/2013/07/child-process-multiple-file-descriptors.html

不要忘了发布结果,并帮助其他人具体什么工作或你改变了… thx