2012-10-08 31 views
10

Necesito generar un proceso hijo desde node.js, mientras usa ulimit para evitar que se use para mucha memoria.Proceso de desove con argumentos en node.js

Siguiendo los documentos, no fue difícil conseguir el engendro básico funcionando: child = spawn("coffee", ["app.coffee"]).

Sin embargo, hacer lo que hago a continuación solo hace que el spawn muera silenciosamente.

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

Si yo corría ulimit -m 65536; coffee app.coffee - funciona como el previsto.

¿Qué estoy haciendo mal aquí?

+0

duplicado posible de [Ejecutar un binario línea de comandos con Node.js] (https://stackoverflow.com/questions/20643470/execute-a-command-line-binary-with-node-js) – iSkore

Respuesta

12

Esos son dos comandos diferentes. No los golpee si está usando spawn. Use procesos secundarios separados.

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

Si usted no está interesado en la corriente de salida (si quieres simplemente tamponada de salida) se puede utilizar 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

Hola vinayr. En su primer ejemplo, ¿el 'ulimit' realmente afecta el siguiente spawn/child entonces? – Industrial

+0

Idealmente debería. ¿Has probado? – vinayr

+0

Bueno, sí creé una secuencia de comandos secundaria que crea una enorme matriz con datos aleatorios, que consume 220 MB de memoria RAM de acuerdo con 'process.memoryUsage(). Rss' independientemente de que se use ulimit como en su ejemplo – Industrial

Cuestiones relacionadas