Articles of 处理

是否使用recursionprocess.nexttick让其他进程或线程工作?

技术上,当我们执行下面的代码(recursionprocess.nexttick),CPU使用率将达到100%或接近。 问题是想象我正在一台CPU上运行,另一个节点HTTP服务器正在工作,它是如何影响它的? 线程做recursionprocess.nexttick让HTTP服务器工作吗? 如果我们有两个线程的recursionprocess.nexttick,他们都得到50%的份额? 因为我不知道有一个核心的任何机器不能尝试它。 而且由于我在这种情况下对线程之间的CPU时间共享的理解是有限的,所以我不应该用具有4个CPU核心的机器来尝试它。 function interval(){ process.nextTick(function(){ someSmallSyncCode(); interval(); }) } 谢谢

node.js:如何在前景中产生分离的子节点并退出

根据child_process.spawn 的文档 ,我期望能够在前台运行一个subprocess,并允许节点进程自己退出,如下所示: handoff-exec.js : 'use strict'; var spawn = require('child_process').spawn; // this console.log before the spawn seems to cause // the child to exit immediately, but putting it // afterwards seems to not affect it. //console.log('hello'); var child = spawn( 'ping' , [ '-c', '3', 'google.com' ] , { detached: true, stdio: 'inherit' } […]

通过nodejs重新附加到产生的进程

我正在Node.js中创build一个小型私有游戏服务器pipe理器; 目前它通过child_process产生游戏来运行游戏: var server = spawn(cmd, args, { cwd: 'something' }); 只要经理继续跑,我可以pipe命令,并按我的意愿处理孩子。 但是,考虑我的经理崩溃或closures的可能性。 那么我将如何重新连接到之前产生的subprocess(在经理closures时仍然在运行)呢? 我可以存储pidfiles来尝试重新连接基于pid; 但我不知道如何获得一个child_process对象访问子的stdio对象。 我真的希望这可以恢复; 任何帮助表示赞赏,谢谢! 请注意 :游戏服务器是专有的,一些例子是Minecraft,Source DS等。假设我没有访问服务器源。 编辑 从节点的child_process读取一些源代码后,看起来像是在stdinStream , stdoutStream或stderrStream选项中指定了一个属性,它应该只是打开一个套接字。 (见428-496行)。 所以问题是,我怎么停止产卵实际上做一个产卵,而只是设置基于指定的PID和我传递的stream的值。 (我会通过做fs.createWriteStream('/proc/PID/fd/0');得到我的stdinStream fs.createWriteStream('/proc/PID/fd/0');这应该工作,因为该fd被创build为一个pipe道。

用node.js中的参数产生进程

我需要从node.js产生一个subprocess,同时使用ulimit来避免使用内存。 在文档之后,获得基本的产卵工作并不困难: child = spawn("coffee", ["app.coffee"]) 。 但是,我正在做的事情只是使得产卵静静地死去。 child = spawn("ulimit", ["-m 65536;", "coffee app.coffee"]) 如果我会运行ulimit -m 65536; coffee app.coffee ulimit -m 65536; coffee app.coffee – 它的工作原理。 我在这里做错了什么?

通过Grunt运行Node应用程序

我试图运行我的节点应用程序作为一个Grunt任务。 但是,我需要将其作为一个subprocess产生,以允许我并行运行watch任务。 这工作: grunt.registerTask('start', function () { grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') }) 但是,当监视任务检测到更改时,这将再次触发启动任务。 在我生成Node应用程序的另一个subprocess之前,我需要杀死前一个进程。 但是,我不知道如何杀死这个过程。 像这样的东西不起作用: var child grunt.registerTask('start', function () { if (child) child.kill() child = grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') }) 看起来: 尽pipe我将生成的进程存储在函数上下文之外的variables中,但它不会保留,所以下次启动任务运行时,child是undefined 。 child没有killfunction…

Node.js产生的颜色?

我正在使用摩卡来testing我的应用程序。 目前,我正在使用Makefiles,但是我想切换到Cakefiles。 当我通过Cake运行我的testing时,来自Mocha的颜色不会显示在控制台上。 这是一个例子: task 'test', 'test project', (options) -> fetchTestFiles './test', (err,files) -> mocha = spawn 'mocha', files mocha.stdout.pipe(process.stdout, end: false) 现在,我试着这样做: task 'test', 'test project', (options) -> fetchTestFiles './test', (err,files) -> mocha = spawn 'mocha', files, customFds: [0..2] 这工作,但是Node.js文档声称customFds已被弃用。 有没有办法通过颜色而不使用customFds ?

在Node.js中读取subprocess中的二进制数据

当试图从ImageMagicksubprocess中读取Node.js中的数据时,它会被破坏。 一个简单的testing案例如下: var fs = require('fs'); var exec = require('child_process').exec; var cmd = 'convert ./test.jpg -'; exec(cmd, {encoding: 'binary', maxBuffer: 5000*1024}, function(error, stdout) { fs.writeFileSync('test2.jpg', stdout); }); 我希望这是相当于命令行convert ./test.jpg – > test2.jpg ,正确写入二进制文件。 最初,maxBuffer选项太小,导致截断的文件出现问题。 增加后,文件现在看起来比预期的稍大,仍然损坏。 标准输出的数据需要通过HTTP发送。 从ImageMagick stdout中读取这些数据的正确方法是什么?

Grunt产生的进程不捕获输出

我已经使用Grunt产生了一个进程,但没有写入输出stream(例如console.log )的东西正在控制台中显示。 我想Grunt显示过程的任何输出。 grunt.util.spawn( { cmd: 'node' , args: ['app.js'] , opts: { stdio: [ process.stdin , process.stout , process.stderr ] } })

process.env在Node应用程序中未定义

当运行我的节点应用程序的node server.js , process.env返回undefined ,所以我无法访问任何环境variables。 这也似乎发生在我尝试将应用程序部署到Duostack时 。 从命令行调用process.env似乎工作,但: $ node > process.env { MANPATH: '/opt/local/share/man:', TERM_PROGRAM: 'Apple_Terminal', … 任何想法可能会出错?

如何通过NodeJSsubprocess运行命令?

我想通过NodeJSsubprocess在Windows上运行命令: var terminal = require('child_process').spawn('cmd'); terminal.stdout.on('data', function (data) { console.log('stdout: ' + data); }); terminal.stderr.on('data', function (data) { console.log('stderr: ' + data); }); terminal.on('exit', function (code) { console.log('child process exited with code ' + code); }); setTimeout(function() { terminal.stdin.write('echo %PATH%'); }, 2000); 当它调用ti.stdin.write ,它将其写入stdin描述符,但是如何触发cmd以在此处作出反应? 如何在input命令提示符时发送“input”键信号? 目前我没有从cmd得到任何回应。