2015-12-04 15 views
6

Nodeでchild_processをforkすると、ノードパラメータをchild_processにどのように渡すことができますか?ノードフラグ/ argsを子プロセスに渡す

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

具体的に私は〜20個のプロセスを起動したい、と--v8・オプションを使用して、各のメモリ使用量を制限したいと思いますが、私はこれを行うのいずれかの例を見つけることができません - ですこれは可能ですか、または子プロセスは親と同じノードパラメータを仮定しますか?

親は次のようになります。

node foo.js 

と子どもたちが

node --some-flag=bar baz.js 

だろう...

私は

child_process.fork() 

を使用してノードのオプションを渡すために探していますそれがオンの場合

spawn() 

または

exec() 

とLY可能その後、私は私が得ることができるものになりますね。簡単な例として

、以下がランはあなたがforkexecArgvオプションを設定する必要があります--harmonyフラグ

var cp = require('child_process'); 

    var args = ['--harmony']; 

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

フォークのドキュメンテーションのように、https:// nodejもargsのリストを受け付けているようです。org/api/child_process.html#child_process_child_process_fork_modulepath_args_options – dm03514

+0

私はこれらの議論がnode.js自体ではなく、あなたのプログラムに行くと思っています。言い換えれば、それらの引数はV8ではなく、あなたのプログラムにあります。 –

+0

私はなぜそれがOPの –

答えて

10

でNode.jsのではないでしょう。

もしそうでなければ、あなたが 'フォーク'しているノードプロセスと同じオプションを得るでしょう(実際にはspawnで、POSIXフォークではありません)。

ですから、このような何か行うことができます:あなたが親からノード・オプションに渡したい場合は

var n = cp.fork(modname, {execArgv: ['--harmony']}); 

を:

var n = cp.fork(modname, {execArgv: process.execArgv.concat(['--harmony'])} 

警告:child_processがに対する保護手段を持っています-eあなたがそれを迂回しているスイッチ!コマンドラインから-eまたは-pを使ってこれを行わないでください。 親プロセスと同じスクリプト(フォークボンベ)を使用して、新しいプロセスを作成します。

あなたはまだ環境を経由してフォークするオプションを渡すことができるようにしたい場合は、あなたがこのような何か行うことができます:別のオプションは、process.execArgv(のようなprocess.execArgv.push('--harmony'))を変更することであってもよい

var cp = require('child_process'); 
var opts = Object.create(process.env); 
opts.execArgv = ['--harmony']; 

var n = cp.fork(filePath, opts); 

を私はかなりしています確かにそれは悪い考えであり、奇妙な行動が起こるかもしれません。

+0

の答えと私の質問を理解していただきありがとうございますで動作しません。私はそれを試してみる。なぜなら、あなたはそれが正当な理由を考えることができない限り、cp.fork()でexecやspawnよりも実行するのが難しい理由はありません。 –

+0

@AlexMills:[フォークのコードはかなり読みやすいです](https://github.com/nodejs/node/blob/master/lib/child_process.js#L19)(最初の引数の魔法を別にしてこれは本質的に、スポーンのための便利な機能です。 'cp.spawn(process.execPath、(options.execArgs || process.execArgs).concat([moduleName]、args)、options)'問題はすべての魔法がなければ、前にではなく、モジュール名。彼らはそれを考えていて、あなたはノードにargsをオプションとして与えることができます(ドキュメントに記載されています)。 –

+0

これが動作することを確認しようとしましたが、どのv8フラグがノードプロセスによって使用されているかを記録する方法が見つかりません。 –

関連する問題