Articles of 处理

Node.js:杀死ChildProcess#spawn的subprocess

考虑下面的代码: import {spawn, exec} from 'child_process'; var child = spawn('su', [process.env.USER, '-c', 'while (true); do sleep 0.3; echo "tick"; done'], {stdio: ['ignore', 'pipe', 'pipe']} ); child.stdout.pipe(process.stdout); child.stderr.pipe(process.stderr); setTimeout(() => { child.kill(); }, 1000); 在这里,我试图运行特定的脚本,运行其他subprocess(在这个例子中su会产生一个bash进程),并closures它。 但是,我不能让它工作如何,我期望。 调用child.kill()杀死su父进程而不是其subprocess。 可以做些什么来实现它 – 调用exec(`pkill -TERM -P ${child.pid}`)而不是child.kill() 。 据我所知,这将杀死与父母child.pid整个进动树。 然而,将两种方法结合起来却有一些奇怪之处: setTimeout(() => { child.kill(); exec(`pkill -TERM -P ${child.pid}`); }, 1000);` […]

如何用node.js模拟bash进程replace?

假设我有1.js : process.stdout.write("Hello world.\n") 和2.js : process.stdout.write( require("fs") .readFileSync(process.argv[2]) .toString() .replace(/Hello/,"Goodbye") ) 并可以在bashterminal内执行以下命令获取2.js输出: $ node 2.js <(node 1.js) Goodbye world. 我怎样才能模拟相同的过程替代机制,而无需bash中介? 我应该在3.js写什么? var child_process = require("child_process") var cp1 = child_process.spawn("node",[__dirname + "/1.js"]) var dev_fd_pipe = ??? // How do I create it? var cp2 = child_process.spawn("node",[__dirname + "/2.js",dev_fd_pipe]) cp2.stdout.pipe(process.stdout)

spawn()函数的“closures”callback在grunt插件中不起作用

我正在创build一个grunt插件,它广泛使用了grunt.util.spawn函数( http://gruntjs.com/api/grunt.util#grunt.util.spawn )。 我的插件的基本框架如下: 'use strict'; module.exports = function (grunt) { var spawn = require("child_process").spawn; var createCommit = function (text) { var commit = grunt.util.spawn({ cmd: "git", args: ["commit","-a","-m", text] }, function() { console.log("FINISH! FINISH! FINISH!"); }); }; grunt.registerMultiTask("myplugin", "Plugin to commit awesome things", function () { createCommit("0.2.0"); }); }; 不过,当我试图执行这个grunk任务时, console.log("FINISH! FINISH! FINISH!"); 永远不会执行英寸callback…有人可以帮助我呢?

未捕获的ReferenceError:进程未定义

我正在使用node.js来创build一个Web应用程序。 当我运行应用程序时(通过在浏览器上打开index.html或在terminal上使用命令“npm start”),我得到两个错误: 未捕获的ReferenceError:进程未定义 未捕获的ReferenceError:require是未定义的 我通过在我的index.html head标签中特别包含了这个脚本的链接来解决“require is not defined”错误,在这个脚本中定义了require函数。 但是,我找不到类似的过程function。 我的问题是双重的: 为什么内置的node.js模块需要重新定义? 为什么他们不被识别,就是“内置模块”? 术语“内置模块”是不是意味着模块不需要外部/二手重新定义? 有没有办法解决这个问题? 我的脚本非常简单,我只是试图使用node.js的一个基本function,所以我不知道我可能做了什么错误。 如果有人出现这个问题,并find解决办法或发生这种情况的原因,你会有很大的帮助。

节点产卵进程检查timout

我已经产生了有时需要很长时间运行的过程,我的问题是有一种方法来限制这个过程时间? 例如3分钟后杀死这个过程?

如何防止子节点进程被父节点进程杀死?

我正在使用child_process.spawn / child_process.fork从node.js应用程序启动一些subprocess。 当用Ctrl-C停止父进程时,subprocess也停止。 有没有一个优雅的方式来保持subprocess运行?

使用edge.js有可能使.Net C#模块调用进程的node.js部分,即做反向调用吗?

你可以在这里看到从Node.js – > C#的interop模型。 我想知道的是,C#代码可以在返回之前调用C#中的进程的Node.js部分中的方法吗? 想象一下,如果你有一个电话,像 var webApi = edge.func('/MyDotNetApi.csx'); webApi(function (error, result) { log.('api started'); }); MyDotNetApi.csx返回,但留下一个套接字侦听器线程运行来处理HTTP请求。 现在,如果进程的Node.js部分持有(不断变化).Net代码需要访问的信息以包含在其HTTP响应中,它是否可以以某种方式请求Node.js?

是否使用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道。