在 node.js 中使用参数生成过程

Posted

技术标签:

【中文标题】在 node.js 中使用参数生成过程【英文标题】:Spawning process with arguments in node.js 【发布时间】:2012-09-28 12:27:27 【问题描述】:

我需要从node.js 生成一个子进程,同时使用ulimit 来防止它占用太多内存。

按照文档,基本的 spawn 工作并不难:child = spawn("coffee", ["app.coffee"])

但是,我在下面做的事情只会让 spawn 无声无息地死去。

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

如果我会运行 ulimit -m 65536; coffee app.coffee - 它会按预期工作。

我在这里做错了什么?

【问题讨论】:

Execute a command line binary with Node.js的可能重复 【参考方案1】:

这是两个不同的命令。如果您使用spawn,请不要加入他们。使用单独的子进程。

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

如果您对输出流不感兴趣(如果您只想缓冲输出),您可以使用exec

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

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

【讨论】:

你好 vinayr。在您的第一个示例中,ulimit 真的会影响以下 spawn/child 吗? 理想情况下应该如此。你测试了吗? 好吧,我确实创建了一个子脚本,该脚本创建了一个包含随机数据的巨大数组 - 根据process.memoryUsage().rss 吃掉了 220mb 的 ram,不管你的示例中使用了 ulimit 也许你想试试'ulimit -v'? @VasanthSriram 确定cp.spawn(lighttpdPath,['-f','lighttpd.conf','-m','lib']);

以上是关于在 node.js 中使用参数生成过程的主要内容,如果未能解决你的问题,请参考以下文章

保持生成过程中的 Node.js 结果有序

Node.js的安装和一些简单的使用

Node.js Buffer(缓冲区)

Node.js log4j-like 日志系统

使用 postgres 和 node js 在单个语句中执行多个查询

将“Vanilla”Javascript 库加载到 Node.js 中