Articles of 生成

多命令shell AS分离subprocessWITH spawn()IN Node.js

供参考: https : //nodejs.org/api/child_process.html#child_process_options_detached 大家好, 所以我需要spawn一个subprocess,由于exec不允许options.detached & child.unref(); ,这意味着它可以与父母分离,允许孩子在自己的父母上运行和完成,反之亦然父母(在我们的特定情况下,父母的过程可以在长期的孩子之前死亡,在这种情况下,更新是完成而不需要像exec那样等待孩子)。 我们有一个由节点(父)应用程序构build的长连接("… ; … ; …")命令,但像spawn("echo stuff >>stderr.log")不起作用,只有spawn('ls', [-l]) ,我显然不能链接命令(因为它在文档中也被引用,并在SO上多次引用。 TLDR; 我们需要使用spawn ,但spawn不能处理链式shell命令。 我现在真的需要在bash中编写我的命令,然后执行它,这是否是唯一的select? 谢谢

我怎样才能从nodejs刷新subprocess?

我使用spawn从nodejs调用一个可执行的C程序,但是C程序似乎没有每次都被刷新。 然后,当缓冲区已满(4K)或subprocess退出时,我的节点程序只能输出subprocess的stdout。 简单来说,这两个部分的代码应该是: invoke.js var spawn = require("child_process").spawn; var ps = spawn("./echo"); ps.stdout.on("data", (data) => { console.log(`${data}`); }); process.on("SIGINT", ps.kill); echo.c #include <stdio.h> #include <signal.h> #include <unistd.h> static volatile int keep = 1; void intHandler(int d){ keep = 0; } int main(){ signal(SIGINT, intHandler); int count = 0; while(keep) { printf("%d hello world!\r\n", ++count); sleep(1); […]

subprocess什么时候杀

当我的节点项目启动它创build一个subprocess,这只需要做一次,所以我把这个代码放在server.js文件,在subprocess中,我执行命令,如npm安装…我的问题是: 我需要杀死这个过程吗? 如果节点应用程序closures之前会发生什么事情,我可以杀死它?

没有收到来自nodejs派生进程的stdout

我试图让nodejs与冒险 (一种基于文本的旧游戏)进行交互。 这个想法是将冒险作为一个subprocess打开,然后通过写入stdin并在stdout上放置一个事件监听器来玩游戏。 当游戏开始时,它打印一个初始的: 欢迎来到冒险! 你想要说明吗? 所以为了说明我的问题,我有一个nodejs + express实例: var childProcess = require('child_process'); var spawn = childProcess.spawn; var child = spawn('adventure'); console.log("spawned: " + child.pid); child.stdout.on('data', function(data) { console.log("Child data: " + data); }); child.on('error', function () { console.log("Failed to start child."); }); child.on('close', function (code) { console.log('Child process exited with code ' + code); […]

从nodejs运行gradlew

试图从nodeJS运行gradlew: const spawn = require('child_process').spawn; const path = require('path'); function run() { var path_dir = path.resolve('./../movies/VanillaApp/android'); var options = { cwd: path_dir }; const ls = spawn('gradlew', ['assembleRelease'], options); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data', (data) => { console.log(`stderr: ${data}`); }); ls.on('close', (code) => { console.log(`child process exited with code ${code}`); }); } […]

Node.js使用产生两个subprocess,然后两个subprocess如何交换?

我有一个名为“A”的ELF程序,“A”是一个tcp服务器,我有一个名为“B”的ELF程序,“B”是一个tcp客户端。 当“B”开始运行时,如果服务器准备就绪,它将向服务器发送消息。 现在我必须使用Node.js来运行“A”和“B”作为两个subprocess,我怎样才能使“A”运行早于“B”? 我这样说: socket.on('xxx', function() { var A = spawn("A", …); … var B = spawn("B", …); setTimeout(B.sendToA, 500); … }); 有什么好的想法? 感谢您的帮助!

如何读取stdio的child_process.spawnSync stdout选项“inheritance”

var childProcess = cp.spawnSync(command, args, { cwd: process.cwd(), env: process.env, stdio: 'inherit', encoding: 'utf-8' }); childProcess.output总是eq [null,null,null] process.stdout.write挂钩不给我任何输出

为什么我的迭代器再次进入?

我有以下程序 – 我使用genny.js来处理asynchronousstream量控制 – 我已经尝试与suspend.js相同 – 类似的错误。 我正在使用Stripe nodejs API。 我的迭代函数似乎被调用两次 – 这是造成一个错误 – 我不明白为什么被调用两次。 这一定是一个简单的思维把戏,我没有看到。 var genny = require('genny') genny.longStackSupport = true var stripe = require("stripe")("sk_live_….") fetchCharges = genny.fn(function* (d) { console.log("Before fetchCharges") var charges = yield fetchList(d()) console.log("After fetchCharges – found ", charges.length) return true }) fetchList = genny.fn(function* (done) { console.log("before fetchList") […]

如何在node.jssubprocess模块中将消息以及从child到stdout传递给父进程?

我有一个child-process模块​​的问题,特别是与child.spawn和child.fork。 我依靠child_process.fork的文档,它说: 这是产生Node.js进程的child_process.spawn()function的特例。 除了正常的ChildProcess实例中的所有方法外,返回的对象还有一个内置的通信通道。 有关详细信息,请参阅child.send(message,[sendHandle])。 我在下面简化了我的问题: parent.js是: var cp = require('child_process'); var n = cp.fork('./child.js'); n.send({a:1}); //n.stdout.on('data',function (data) {console.log(data);}); n.on('message', function(m) { console.log("Received object in parent:"); console.log( m); }); child.js是: process.on('message', function(myObj) { console.log('myObj received in child:'); console.log(myObj); myObj.a="Changed value"; process.send(myObj); }); process.stdout.write("Msg from child"); 正如所料。 输出是: Msg from child myObj received in child: { […]

分叉一个subprocess并注入依赖

我目前有一个模块是阻塞的操作,所以我正在考虑把它变成一个subprocess,而不是叉。 如果我想这样做,那么我当然需要修改我的模块的架构。 该模块要求dependency injection通过调用模块作为一个函数,传入依赖关系,如下所示: var dependency = { name: "Bob" } require('worker')(dependency) 然后在我的worker模块中: module.exports = function (dependency) { // Outputs { name: "Bob" } console.log(dependency) } 我怎样才能把这个例子变成一个分叉的subprocess呢?