Tag: subprocess

运行节点作为从subprocess运行的脚本的后台进程

我正在端口5100上运行一个节点服务器。它执行一个shell脚本作为subprocess,然后启动另一个节点服务器。 var execFile = require('child_process').execFile; execFile("./testscript", args, {cwd: cwd}, function (error, stdout, stderr) { console.log("error.." + error); console.log("stdout.." + stdout); console.log("stderr.." + stderr); }) 在脚本中,我正在通过nohup运行一个节点进程: nohup node server.js PORT=5200 2>/dev/null 1>/dev/null & 现在,node @ 5200拥有了对@ 5100节点的testing脚本的支持。 当我杀死节点@ 5100的PID时,一切都停止。 我希望node @ 5200在testscript和node @ 5100退出时仍然运行。

在AWS Lambda中使用JavaScript eval()

我想使用AWS Lambda运行用户通过Web提交的JavaScript代码。 我的Lambda函数会返回返回值stderr和stdout 。 我可以遇到什么问题? 恶意用户是否能够提交导致Lambda函数问题的代码? 执行用户所做的更改,例如对于节点环境或文件系统,是否在整个调用中保持不变? 有什么办法可以防止呢? 而不是eval()我可以将文件写入Lambda文件系统并调用: const userCodeProcess = require('child_process').fork('user_code.js') userCodeProcess.on('message', response.send)

在IntelliJ IDEA上debuggingnode.js child_process分叉示例

我想从这里使用IntelliJ IDEA 12.1.3和节点10.10debuggingchild_process 示例 。 当我从terminal运行nodejs app.js ,一切正常。 控制台输出按预期显示。 但是,当我使用IDEAdebugging相同的脚本时,控制台输出中没有消息,应用程序就在那里。 这是控制台窗口中的内容: /usr/bin/nodejs –debug-brk=58954 app.js debugger listening on port 58954 debugger listening on port 58954 当我在没有附加debugging器的情况下在IDEA中运行脚本时,脚本按预期工作。 为什么附加debugging器会破坏脚本?

nodejs:child_process.spawn不报告退出代码

在写一个简单工具的unit testing时,我无法获得以require('child_process').spawn的subprocess的进程退出代码。 为了简化如果下来,考虑这个简单的节点命令退出代码35: SHELL> node -e“process.exit(35)”& [1] 23427 [1] +赛义达35节点-e“process.exit(35)” 现在考虑下面的文件,上面的命令用exec和spawn执行。 目标是捕捉退出代码: shell>猫WTF.js var cp = require('child_process'); cp.exec('node -e“process.exit(35);”',function(err){ console.log('child exit code(exec)',err.code); }); cp.spawn('node',['-e',''process.exit(35);“'])。on('exit',function(code){ console.log('孩子退出代码(spawn)',代码); }); 但是当它运行…惊喜: SHELL>节点WTF.js 子代码退出(exec)35 子代码退出(spawn)0 我在产卵召唤中错过了一些明显的东西吗? SHELL> node –version V6.0.0

在Fortran中产生进程

如何在Fortran中启动subprocess(比如执行shell命令等)? 在Node.js中,我们可以使用spawn或exec来启动subprocess: var proc = require("child_process").spawn("ls", ["-l"]); proc.stdout.on("data", function (chunk) { console.log(chunk); }); // or var proc = require("child_process").exec("ls -l"], function (err, stdout, stderr) { … }); 上面的两个例子都运行ls -l (列出文件和目录)。 在Fortran中如何实现同样的function?

Node.js派生的孩子返回消息限制,并绕过它

我在节点上做了一些繁重的统计,所以我将计算分叉到一个subprocess,subprocess将处理所有的mongo查询,并通过数据等循环,最后将结果发送回母进程。 它工作得很好,数据量相对较小。 但是当数据变得足够大的时候,通信似乎被阻塞了,或者在回送过程中出现了问题。 返回的数据是相当大的HighChart对象,它包含了超过200k的数据点,我可以在subprocess调用process.send(data)之前logging消息,并且cpu活动在subprocess中几乎降到0母亲进程的CPU使用率得到了很高的启发,只是呆在那里,并没有下降。 在这一点上,这个过程似乎只是挂起(而不是挂起,因为它仍然响应其他请求),但process.on('message',function(){}); 即使我只是让它坐在那里跑。 IPC可以处理节点的大小是否有限制? 无论如何还是有这个或一些破解呢? 有人build议使用TCP或其他IP协议,而不是IPC,但是这样会使pipe理孩子的生命期有点复杂。 还有没有任何免费的工具,只是使用console.log除了使debugging节点更容易? 提前感谢您的帮助 问候。 G

callbackexception

我写了一个简单的NodeJS程序来执行一个shell脚本。 我分出一个孩子,并尝试执行脚本。 我已经在退出时给孩子回电了,如下所示。 但是当我尝试运行程序的时候却抛出了一个exception。 我哪里错了? var exec = require('child_process').exec; function callXmlAgent(callback) { try { var child = exec('./a.sh'); var response = { stdout: '', stderr: '', errCode: -1 }; child.stdout.on('data', function (data) { response.stdout += data; }); child.stderr.on('data', function (data) { response.stderr += data; }); child.on('close', function (errCode) { if (errCode) { response.errCode = errCode; […]

在node.js中为所需模块创buildcallback

有没有可能在我自己创build的模块中创build某种callback? 我的问题是我已经为我的应用程序写了一个模块。 在这个模块内完成了一些任务,现在我的主应用程序应该得到一个模块完成任务的反馈。 以下描述我想要但不会工作的课程… //module mymod.js function start() { var done = false; //do some tasks done = true; } exports.done = done; 主要应用程序 var mymod = require("./mymod.js"); while(!mymod.done) { //do some tasks } 如果有人能帮助我,我会很高兴。 PS:我尝试了这种情况下的subprocess(叉),但因为它似乎复制整个过程,我不能访问打开OpenCVvideo捕获了… :(通过使用模块我没有遇到这个问题,而是我得到这个一个为它^^

Nodejs如何等待subprocess退出或允许响应

我的nodejs应用程序收到一个特定的请求后,产生一个使用spawn的subprocess(我不能使用exec,因为输出很大,不知道是否可以添加callback到产生的进程)准备响应。 我希望subprocess发送响应或主进程等到孩子准备响应并退出。 问题是主stream程不等孩子。 我编写了这样的东西 inputQuery: function(req, res){ var output=""; var query = "printjson(db.getCollectionNames())"; var temp = spawn("mongo", ["mongoweb ", "-eval", query]); temp.on('error', function (err){ console.log(err); }); temp.stdout.on('data', function(data){ output += data; }); temp.stderr.on('data', function(data){ console.log(data); }); temp.on("exit", function(code){ console.log("Output is :" + output); res.send(output); // Either send response here or after the log message below […]

如何在Node.js中以非阻塞方式将大量的数据从subprocess发送到父进程?

我试图从一个subprocess发送一个巨大的JSONstring到父进程。 我最初的做法如下: child: process.stdout.write(myHugeJsonString); parent: child.stdout.on('data', function(data) { … 但现在我读了process.stdout是阻塞的: process.stderr和process.stdout不同于Node中的其他stream,写入它们通常是阻塞的。 他们阻止的情况下,他们引用常规文件或TTY文件描述符。 在这种情况下,他们指的是pipe道: 他们在Linux / Unix中被阻塞。 它们像Windows中的其他stream一样是非阻塞的。 child_process.spawn的文档说我可以使用pipe选项在subprocess和父进程之间创build一个pipe道。 但是不是在Linux / Unix中pipe理我的stdout阻塞(根据上面引用的文档)? 好的, Stream object选项呢? 嗯,似乎我可以共享一个可读或可写的stream,引用与subprocess的套接字。 这会不会阻塞? 我将如何执行? 所以问题是:如何在Node.js中以非阻塞方式将大量数据从subprocess发送到父进程? 一个跨平台的解决scheme将是非常整洁,例解释非常赞赏。