2015-12-04 12 views
6

Bir child_process öğesini Node'a bağlarsak, nod parametrelerini child_process'e nasıl geçirebiliriz?Düğüm bayraklarını/denetimlerini alt süreçlere geçirme

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

Özellikle ben ~ 20 süreçlerini yumurtlamaya istiyorum ve --v8-seçeneklerini kullanarak her bellek kullanımını sınırlamak istiyorum, ama bunu yaparken herhangi bir örnekleri bulamıyor - olduğu Bu mümkün veya çocuk süreçleri ebeveyn ile aynı düğüm parametrelerini kabul eder mi?

ebeveyn olacaktır:

node foo.js 

ve çocukların kullanılarak düğüm seçenekleri geçmek

node --some-flag=bar baz.js 

...

Ben arıyorum olacağını

child_process.fork() 

ama eğer öyleyse ly mümkün

spawn() 

veya

exec() 

ile o zaman ben ne alabilirim sanırım. Basit bir örnek olarak

, --harmony bayrak Sen fork için execArgv seçeneğini ayarlamak gerekir

var cp = require('child_process'); 

    var args = ['--harmony']; 

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

Çatal belgelerine benzediği anlaşılıyor ki, bunlar da bir çok satırın listesini kabul ediyor: https: // nodejs.org/API/child_process.html # child_process_child_process_fork_modulepath_args_options O delillerin hiç ben bir örnek vermeye çalıştık başka bir deyişle, bu argümanlar V8 için, sadece programa – dm03514

+0

Bu, OP –

+0

için değil, kendisini node.js için, programınıza gitmek düşünüyorum –

cevap

10

ile şu olacak değil çalıştırmak node.js.

Eğer yapmazsanız, 'forking' düğüm işlemiyle aynı seçeneği elde edersiniz (aslında sadece spawn, POSIX-fork değil).

Yani böyle bir şey yapabileceğini:

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

Eğer ebeveynden düğüm-seçeneklerine geçmek isterseniz:

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

:child_process karşı bir teminat vardır -e bununla uğraştığınızı değiştirin! Yani bunu komut satırından -e veya -p ile yapmayın. Ebeveynten gelenle aynı olan bir komut dosyasıyla yeni bir süreç oluşturuyorsunuz - bir çatal bomba. Hala çevreye aracılığıyla çatala seçenekleri geçmek mümkün olmasını istiyorsanız

, böyle bir şey yapabileceğini:

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

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

Diğer bir seçenek process.execArgv (process.execArgv.push('--harmony') gibi) ama ben güzelim değiştirmek olabilir Bu kötü bir fikir olduğundan ve başka yerlerde garip davranışlarla sonuçlanabileceğinden emin olun.

+0

numaralı telefondan neden çalışmadığı sorusunun cevabı ve anlaşılması için teşekkürler. Denerim. Bunun için iyi bir neden düşünemezseniz, cp.fork() ile exec ya da spawn'dan daha az niçin yapılması gerektiğini hiçbir sebep göremiyorum. –

+0

@AlexMills: [için kod 'fork' oldukça okunabilir] (https://github.com/nodejs/node/blob/master/lib/child_process.js#L19) (dışında, ilk olarak bağımsız değişken sihirli hatları), esas olarak yumurtlama için bir kolaylık işlevidir. Bütün büyü olmadan böyle bir şeydir: 'cp.spawn (process.execPath, (options.execArgs || process.execArgs) .concat ([modulename] args), options)' sorun args sonra gelir olmasıdır modül adı, daha önce değil. Bunu düşündüler ve bir seçenek olarak düğüme args sağlayabiliyorsunuz (dokümanlardaki gibi). –

+0

çalıştığını teyit etmek için çalışıyorum, ama v8 bayrakları bir düğüm işlem tarafından kullanılmakta olduğunu günlüğe nasıl bulamıyor .. execArgs child_process geçirilen –