如果我们在Node中派生一个child_process,我们如何将节点参数传递给child_process?
https://nodejs.org/api/child_process.html
具体来说,我想产生~20个进程,并希望通过使用–v8-options限制每个进程的内存使用量,但我找不到任何这样做的例子 – 这是可能的还是子进程假设与父节点相同的节点参数?
父母将是:
node foo.js
孩子们会
node --some-flag=bar baz.js
…
我希望使用传递节点选项
child_process.fork()
但如果它只有可能
spawn()
要么
exec()
然后我想我会拿走我能得到的东西.
举个简单的例子,下面的代码不会运行带有–harmony标志的Node.js
var cp = require('child_process'); var args = ['--harmony']; var n = cp.fork(filePath,args,Object.create(process.env));
解决方法
您需要将execArgv选项设置为fork.
如果不这样做,您将获得与您’分叉’的节点进程相同的选项(它实际上只是一个spawn,而不是POSIX-fork).
所以你可以这样做:
var n = cp.fork(modname,{execArgv: ['--harmony']});
如果要从父节点传递节点选项:
var n = cp.fork(modname,{execArgv: process.execArgv.concat(['--harmony'])}
警告:child_process有一个针对-e开关的安全措施,你正在规避它!所以不要在命令行中使用-e或-p执行此操作.
您将创建一个新进程,其脚本与父进程相同 – 一个fork炸弹.
如果您仍希望能够通过环境将选项传递给fork,您可以执行以下操作:
var cp = require('child_process'); var opts = Object.create(process.env); opts.execArgv = ['--harmony']; var n = cp.fork(filePath,opts);
另一种选择可能是改变process.execArgv(如process.execArgv.push(‘ – harmony’)),但我很确定这是一个坏主意,可能会导致奇怪的行为.