将节点标志/parameter passing给subprocess
如果我们在Node中派生一个child_process,我们如何将节点parameter passing给child_process?
https://nodejs.org/api/child_process.html
具体来说,我想产卵〜20进程,并希望通过使用 – v8选项限制每个内存的使用情况,但我找不到任何这样做的例子 – 这是可能的或做subprocess承担与父节点相同的节点参数?
父母将是:
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分叉)。
所以你可以做这样的事情:
var n = cp.fork(modname, {execArgv: ['--harmony']});
如果你想传递父节点的选项:
var n = cp.fork(modname, {execArgv: process.execArgv.concat(['--harmony'])}
警告: child_process
有一个安全的防止-e
开关,你绕过了! 所以不要使用-e
或-p
从命令行执行此操作。 你将用一个与父母相同的脚本创build一个新的stream程 – 一个叉形炸弹。
如果你仍然希望能够通过环境传递选项,你可以这样做:
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')
),但我很确定这是一个坏主意,可能会导致奇怪的行为在其他地方。