2012-10-08 8 views
10

Potrzebuję odrodzić proces potomny od node.js, korzystając z ulimit, aby uniemożliwić korzystanie z dużej ilości pamięci.Proces forowania z argumentami w pliku node.js

Po zapoznaniu się z dokumentami, nie było trudno uzyskać podstawowe działanie odrodzenia: child = spawn("coffee", ["app.coffee"]).

Jednak robienie tego, co robię poniżej, powoduje, że spawn umiera w ciszy.

child = spawn("ulimit", ["-m 65536;", "coffee app.coffee"]) 

Gdybym działał ulimit -m 65536; coffee app.coffee - działał jako zamierzony.

Co ja tu robię źle?

+0

Możliwe duplikat [Wykonaj binarnego Linia komend node.js] (https://stackoverflow.com/questions/20643470/execute-a-command-line-binary-with-node-js) – iSkore

Odpowiedz

12

To są dwa różne polecenia. Nie wymieniaj ich, jeśli używasz spawn. Użyj oddzielnych procesów potomnych.

child1 = spawn('ulimit', ['-m', '65536']); 
child2 = spawn('coffee', ['app.coffee']); 

Jeżeli nie jesteś zainteresowany w strumieniu wyjściowym (jeśli chcesz tylko buforowane wyjście) można użyć exec.

var exec = require('child_process').exec, 
child; 

child = exec('ulimit -m 65536; coffee app.coffee', 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    } 
}); 
+1

Cześć vinayr. W twoim pierwszym przykładzie, czy "ulimit" rzeczywiście wpływa na następujące miejsce odradzania/dziecko? – Industrial

+0

Idealnie powinno. Czy testowałeś? – vinayr

+0

Cóż, stworzyłem skrypt podrzędny, który tworzy ogromną tablicę z losowymi danymi - zjada 220mb pamięci RAM zgodnie z 'process.memoryUsage(). Rss' bez względu na ulimit używany w twoim przykładzie – Industrial