Articles of 进程

节点脚本如何在我当前的bash上下文(进程)中运行?

在bash你可以source或. 在当前的上下文中运行一些bash脚本。 所以,如果你有例如文件foo与alias bar='echo bam'在其中,当你运行它像 $ . foo 它会从文件foo中将这个别名发送到当前的上下文中。 我知道,如果我通常使用#!/usr/bin/env node第一行来运行节点脚本,那么这个脚本在子shell中运行,或者作为单独的进程运行。 我想避免这一点,并使节点脚本作用于我当前的bash进程(上下文)。 我怎样才能运行节点脚本,改变我当前的bash上下文? ps:任何例子都不错。 节点脚本只能改变我的目录,但它也必须发生在我当前的bash上下文中。 ps2:小问题:如果在节点中是不可能的(我很难相信这个),或者它非常复杂,那么在其他语言中是可能的吗? 像PHP,Java,Ruby(我不问C,因为它很明显:)如果是这样,请给我一些例子。

NodeJS分叉进程(1个VM,多个处理器)VS多个VM,1个进程

我正在NodeJS中开发一个服务,它将使用tesseract OCR引擎的节点包装器从图像创build文本文件。 我希望它是一个不断运行的服务,由暴发户启动并重新启动(崩溃)。 我可以select使服务器(运行这个服务器的虚拟机)具有大内存和磁盘空间的多个核心机器,或者我可以select创build4个或5个小型虚拟机,每个虚拟机1个内核,1 GB内存,相对较小磁盘大小。 采用第一种方法,我必须分叉各种subprocess以利用所有内核,这增加了代码的复杂性。 另一方面,我只有一个虚拟机担心。 第二种方法,我不必担心分叉subprocess,但我将不得不创build和configuration多个虚拟机。 每种方法还有没有其他的利弊呢?

为什么不可能发送更多的消息(string)分叉子stream程?

问题 为什么不可能在NodeJS中发送更多的消息(string)给分叉的subprocess呢? 这个答案只是说,这是不可能的,但没有提供任何解释。 这个问题是如何产生的 我需要发送数据库连接到subprocess,以避免连接到这些数据库多次。 我的程序连接到四个不同的服务: Redis , OrientDB , Postgres和ElasticSearch 。 我正在做一些繁重的工作,并且需要使用多个进程,并让所有进程连接到这些服务。 我已经做了一个对象,以容纳所有这些客户: var clients = { redisClient: /* redis connection */ orientClient: /* orientdb connection */ pgClient: /* postgres connection */ elasticClient: /* elasticsearch connection */ }; 但是,当我将客户端发送到subprocess: var child = cp.fork(__dirname + '/singleCrawler.js'); child.send(clients); 我得到以下错误: TypeError: Converting circular structure to JSON at […]

在Node.js中的两个独立运行的进程之间发送消息

我在本地机器上有一个Adobe AIR应用程序,它通过套接字连接与远程node.js服务器脚本(socket-script.js)进行通信。 此外,我通过命令行启动一个新的node.js进程,并向第二个服务器脚本(terminal-script.js)发送一些额外的参数。 问题:如何将参数从terminal-script.js发送到socket-script.js? 之后,socket-script.js应该将参数广播到AIR应用程序。 任何人都知道如何连接Node.js中的两个独立运行的进程? 谢谢。 插图链接

尝试在Windows上使用Gulp和Babel来分离Node.js进程

我的应用程序是用同构JavaScript构build的,我使用Gulp任务在新实例上运行Node.js服务器,然后侦听文件更改以重新启动服务器并重新加载浏览器(使用Browsersync )。 我想使用Babel在ECMAScript 6中编写我的服务器端代码,以及我的客户端代码。 我想避免使用Babel node_modules/.bin/babel-core.cmd server.js ,而是使用node_modules/.bin/babel-core.cmd server.js命令,但是child_process.fork()只允许执行一个可执行文件: let child = cp.fork('server.js', [], { execPath: path.normalize('node_modules/.bin/babel-node.cmd'), env: _.assign({NODE_ENV: 'development'}, process.env) }); 此脚本不起作用,并按照预期引发以下错误: child_process.js:588 p.open(fd); ^ Error: EINVAL, invalid argument at Error (native) at Object.exports._forkChild (child_process.js:588:5) at Function.startup.processChannel (node.js:704:10) at startup (node.js:59:15) at node.js:814:3 我想使用child_process.fork()来处理这种情况。 child_process.spawn()在这里不起作用,因为两个Node.js进程之间没有直接的通信。 我正在听事件来执行操作: // server.js server.listen(port, function() { if (process.send) { […]

为什么node.js可以在if语句中调用clustet.fork()?

对于一个典型的C程序,我们做这样的事情来创build一个新的过程: int main(void) { pid_t childPID; childPID = fork(); if(childPID >0){ do something } else if(childPID == 0){ do something } else { do something } } 但是在一个node.js程序中,fork通常在if语句中完成: var cluster = require('cluster'); if (cluster.isMaster) { do something cluster.fork() } else{ do something for the child process } 为什么我们可以在Node.js的if语句中创buildsubprocess? 为什么subprocess不跳过else块? 谢谢!

subprocessNode.js中的stdout和stderr列大小

我想监视来自Node中subprocess的实时数据。 我可以做到这一点没有问题,下面的代码片段。 var fs = require('fs'); var spawn = require('child_process').spawn; (function(){ "use strict"; var processMonitor, processListen, processDeauth; var parseStreamDataIn = function(data) { var str = data.toString('utf8'); console.log(str); }; var init = function() { processMonitor = spawn('trafficmon' , ['-w'], {'shell': '/bin/bash'}); processMonitor.stdout.on('data', function (data) { //trafficmon uses stderr, nothing needed here… }); processMonitor.stderr.on('data', parseStreamDataIn); processMonitor.on('close', function […]

什么是破坏进程内存?

2012-07-20T03:04:50+00:00 heroku[web.1]: Process running mem=546M(106.8%) 2012-07-20T03:04:50+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-07-20T03:05:11+00:00 heroku[web.1]: Process running mem=583M(113.9%) 2012-07-20T03:05:11+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-07-20T03:05:30+00:00 heroku[web.1]: Process running mem=611M(119.4%) 2012-07-20T03:05:30+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-07-20T03:05:50+00:00 heroku[web.1]: Process running mem=611M(119.4%) 2012-07-20T03:05:50+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-07-20T03:06:10+00:00 heroku[web.1]: Process running mem=605M(118.3%) 2012-07-20T03:06:10+00:00 heroku[web.1]: […]

NodeJS将一个ws对象传递给一个subprocess

我试图将ws对象传递给subprocess。 在“send”函数下的subprocess( https://nodejs.org/api/child_process.html )下的节点文档中,它表示第二个参数可以是子对象可以共享的TCP对象。 当我尝试传递一个ws对象时,它说:“抛出新的TypeError('这个句柄types不能被发送');”。 我想这是因为它是一个WS对象,而不是一个TCP对象,但我想知道是否有无论如何实现与WS对象,而不是一个TCP对象相同的效果…? 由于ws只是符合websocket标准的tcp对象的一个​​包装。

如何在subprocess间共享一个mongoose连接?

我有以下db.js模块,照顾mongoose的连接: 'use strict'; module.exports = function(config) { var mongoose = require('mongoose'); //mongoose.connect(config.connectionString); var db = mongoose.connection; db.open(config.server, config.database, config.port, {user: config.user, pass: config.password}); db.on('error', console.error.bind(console, 'connection error:')); db.once('open', console.log.bind(console, 'connected to database server ' + config.server)); }; 在我的app.js中,我简单地调用var db = require('./db')(config.db); ,在我的应用程序中的所有模型运​​行良好。 对于一些后台作业,我分叉了一堆subprocess(使用worker-farm ),并且由于我不知道如何传递连接对象(或者甚至是否允许),我在每个连接对象中打开一个连接db.js)。 问题是,过了一段时间,我开始经历每个subprocess的{ [Error: Trying to open unclosed connection.] state: 1 } 。 […]