If we fork a child_process in Node, how can we pass node parameters to the child_process?
https://nodejs.org/api/child_process.html
Specifically I would like to spawn ~20 processes, and would like to limit the memory usage of each by using --v8-options, but I can't find any examples of doing this - is this possible or do the child processes assume the same node parameters as the parent?
the parent would be:
node foo.js
and the children would be
node --some-flag=bar baz.js
...
I am looking to pass node options using
child_process.fork()
but if it's only possible with
spawn()
or
exec()
then I guess I will take what I can get.
As a simple example, the following will not run Node.js with the --harmony flag
var cp = require('child_process');
var args = ['--harmony'];
var n = cp.fork(filePath, args , Object.create(process.env));
You'll need to set the execArgv
option to fork
.
If you don't, you'll get the same option as the node process you're 'forking' (it actually is just a spawn
, not a POSIX-fork).
So you could do something like this:
var n = cp.fork(modname, {execArgv: ['--harmony']});
If you want to pass on the node-options from the parent:
var n = cp.fork(modname, {execArgv: process.execArgv.concat(['--harmony'])}
Warning: child_process
has a safeguard against the -e
switch that you are circumventing with that! So don't do this from the command line with an -e
or -p
.
You will be creating a new process with a script that is the same as that from the parent – a fork bomb.
If you still want to be able to pass on options to fork via the environment, you could do something like this:
var cp = require('child_process');
var opts = Object.create(process.env);
opts.execArgv = ['--harmony'];
var n = cp.fork(filePath, opts);
Another option may be to alter process.execArgv
(like process.execArgv.push('--harmony')
) but I am pretty sure that is a bad idea and might result in strange behaviour elswhere.