2015-12-04 45 views
6

如果我們在Node中派生一個child_process,我們如何將節點參數傳遞給child_process?將節點標誌/參數傳遞給子進程

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

具體來說,我想產卵〜20個處理,並希望通過使用--v8-選項來限制每個的內存使用情況,但我不能找到這樣做的任何實施例 - 是這是可能的還是子進程假定與父進程相同的節點參數?

家長會:

node foo.js 

和孩子會

node --some-flag=bar baz.js 

...

我期待利用通過節點選項

child_process.fork() 

但是如果它開着LY可能與

spawn() 

exec() 

那麼我想我會採取什麼我可以得到的。

舉一個簡單的例子,下面將 Node.js的運行與--harmony標誌

var cp = require('child_process'); 

    var args = ['--harmony']; 

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

它看起來像fork文檔說它也接受參數列表https:// nodejs。org/api/child_process.html#child_process_child_process_fork_modulepath_args_options – dm03514

+0

我認爲那些參數只是轉到你的程序,而不是轉到node.js本身,換句話說,那些參數不是轉到V8,只轉到你的程序 –

+0

我試圖提供一個例子爲什麼這在OP –

回答

10

你需要的execArgv選項設置爲fork

如果你不這樣做,你會得到與你分支的節點進程相同的選項(它實際上只是一個spawn,而不是POSIX分叉)。

所以你可以做這樣的事情:

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

如果你想通過從父節點選項:

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

警告:child_process具有對一個保障-e切換,你繞過了!所以不要在命令行中使用-e-p來執行此操作。 您將創建一個新的流程,其腳本與父級相同 - 一個叉形炸彈。

如果您仍然希望能夠通過對選擇通過環境叉,你可以做這樣的事情:

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')),但我敢肯定這是一個壞主意,並可能導致奇怪的行爲在其他地方。

+0

中不起作用,謝謝你的回答並理解我的問題。我會試試看。我沒有看到爲什麼用cp.fork()比使用exec或spawn更不可能做到這一點,除非你能想到一個好的理由。 –

+0

@AlexMills:[fork的代碼非常易讀](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標誌.. –