当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将节点标志/args传递给子进程》经验,为你挑选了1个好方法。

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

Patrick J. S.. 13

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



1> Patrick J. S..:

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

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有