将节点标志/ args传递给子进程

时间:2015-12-04 19:59:10

标签: node.js fork child-process

如果我们在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));

1 个答案:

答案 0 :(得分:10)

您需要将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,您可以执行以下操作:

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')),但我很确定这是一个坏主意,可能会导致奇怪的行为。