将节点 flags/args 传递给 child 进程

Passing node flags/args to child process

如果我们在Node中fork一个child_process,我们如何将节点参数传递给child_process?

https://nodejs.org/api/child_process.html

具体来说,我想生成 ~20 个进程,并想通过使用 --v8-options 来限制每个进程的内存使用,但我找不到任何这样做的例子 - 这可能吗? child 进程采用与 parent?

相同的节点参数

parent 将是:

node foo.js

child人会是

node --some-flag=bar baz.js

...

我希望使用

传递节点选项
child_process.fork()

但如果只有

才有可能
spawn()

exec()

那我想我会得到我能得到的。

作为一个简单的例子,下面将 not 运行 Node.js with the --harmony flag

   var cp = require('child_process');

   var args  = ['--harmony'];

   var n = cp.fork(filePath, args , Object.create(process.env));

您需要将 execArgv 选项设置为 fork

如果不这样做,您将获得与您 'forking' 的节点进程相同的选项(它实际上只是 spawn,而不是 POSIX-叉)。

所以你可以这样做:

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