精华内容
下载资源
问答
  • Nodejs进程间通信.pdf

    2021-09-14 12:59:36
    Nodejs进程间通信.pdf
  • 本篇文章主要介绍了详解使用PM2管理nodejs进程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了nodeJS进程管理器pm2的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Monitr 是 Nodejs 进程监视工具,此模块目前只用于 Linux 上。此模块产生一个线程来监视进程/nodejs,并通过 Unix UDP 套接字定期发送 JSON。 标签:Monitr
  • nodejs进程通信--pm2 cluster方式, pm2版本 2.4.2,node 版本 v7.5.0
  • 管理你NodeJS进程的生命周期
  • nodejs进程管理

    2019-09-23 12:27:47
    NodeJS可以感知和控制自身进程的运行环境和状态,也可以创建子进程并与其协同工作,这使得NodeJS可以把多个程序组合在一起共同完成某项工作,并在其中充当胶水和调度器的作用。  我们已经知道了NodeJS自带的fs模块...

      NodeJS可以感知和控制自身进程的运行环境和状态,也可以创建子进程并与其协同工作,这使得NodeJS可以把多个程序组合在一起共同完成某项工作,并在其中充当胶水和调度器的作用。

      我们已经知道了NodeJS自带的fs模块比较基础,把一个目录里的所有文件和子目录都拷贝到另一个目录里需要写不少代码。另外我们也知道,终端下的cp命令比较好用,一条cp -r source/* target命令就能搞定目录拷贝。那我们首先看看如何使用NodeJS调用终端命令来简化目录拷贝,示例代码如下:

    var child_process = require('child_process');
    var util = require('util');
    
    function copy(source, target, callback) {
        child_process.exec(
            util.format('cp -r %s/* %s', source, target), callback);
    }
    
    copy('a', 'b', function (err) {
        // ...
    });

      从以上代码中可以看到,子进程是异步运行的,通过回调函数返回执行结果。

    一、API

    1、process:官方文档: http://nodejs.org/api/process.html

      任何一个进程都有启动进程时使用的命令行参数,有标准输入标准输出,有运行权限,有运行环境和运行状态。

      在NodeJS中,可以通过process对象感知和控制NodeJS自身进程的方方面面。

      另外需要注意的是,process不是内置模块,而是一个全局对象,因此在任何地方都可以直接使用。

    2、Child Process:官方文档: http://nodejs.org/api/child_process.html

      使用child_process模块可以创建和控制子进程。

      该模块提供的API中最核心的是.spawn,其余API都是针对特定使用场景对它的进一步封装,算是一种语法糖。

    3、Cluster:官方文档: http://nodejs.org/api/cluster.html

      cluster模块是对child_process模块的进一步封装,专用于解决单进程NodeJS Web服务器无法充分利用多核CPU的问题。使用该模块可以简化多进程服务器程序的开发,让每个核上运行一个工作进程,并统一通过主进程监听端口和分发请求。

    二、应用场景

    1、如何获取命令行参数

      在NodeJS中可以通过process.argv获取命令行参数

      但是比较意外的是,node执行程序路径和主模块文件路径固定占据了argv[0]argv[1]两个位置,而第一个命令行参数从argv[2]开始。为了让argv使用起来更加自然,可以按照以下方式处理。

    function main(argv) {
        // ...
    }
    
    main(process.argv.slice(2));

    2、如何退出程序

      通常一个程序做完所有事情后就正常退出了,这时程序的退出状态码为0。或者一个程序运行时发生了异常后就挂了,这时程序的退出状态码不等于0。如果我们在代码中捕获了某个异常,但是觉得程序不应该继续运行下去,需要立即退出,并且需要把退出状态码设置为指定数字,比如1,就可以按照以下方式:

    try {
        // ...
    } catch (err) {
        // ...
        process.exit(1);
    }

    3、如何控制输入输出

      NodeJS程序的标准输入流(stdin)、一个标准输出流(stdout)、一个标准错误流(stderr)分别对应process.stdinprocess.stdoutprocess.stderr,第一个是只读数据流,后边两个是只写数据流,对它们的操作按照对数据流的操作方式即可。例如,console.log可以按照以下方式实现。

    function log() {
        process.stdout.write(
            util.format.apply(util, arguments) + '\n');
    }

    4、如何降权

      在Linux系统下,我们知道需要使用root权限才能监听1024以下端口。但是一旦完成端口监听后,继续让程序运行在root权限下存在安全隐患,因此最好能把权限降下来。以下是这样一个例子。

    http.createServer(callback).listen(80, function () {
        var env = process.env,
            uid = parseInt(env['SUDO_UID'] || process.getuid(), 10),
            gid = parseInt(env['SUDO_GID'] || process.getgid(), 10);
    
        process.setgid(gid);
        process.setuid(uid);
    });

      上例中有几点需要注意:

    1. 如果是通过sudo获取root权限的,运行程序的用户的UID和GID保存在环境变量SUDO_UIDSUDO_GID里边。如果是通过chmod +s方式获取root权限的,运行程序的用户的UID和GID可直接通过process.getuidprocess.getgid方法获取。

    2. process.setuidprocess.setgid方法只接受number类型的参数。

    3. 降权时必须先降GID再降UID,否则顺序反过来的话就没权限更改程序的GID了。

    5、如何创建子进程

      以下是一个创建NodeJS子进程的例子。

    var child = child_process.spawn('node', [ 'xxx.js' ]);
    
    child.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });
    
    child.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });
    
    child.on('close', function (code) {
        console.log('child process exited with code ' + code);
    });

      上例中使用了.spawn(exec, args, options)方法,该方法支持三个参数。第一个参数是执行文件路径,可以是执行文件的相对或绝对路径,也可以是根据PATH环境变量能找到的执行文件名。第二个参数中,数组中的每个成员都按顺序对应一个命令行参数。第三个参数可选,用于配置子进程的执行环境与行为。

      另外,上例中虽然通过子进程对象的.stdout.stderr访问子进程的输出,但通过options.stdio字段的不同配置,可以将子进程的输入输出重定向到任何数据流上,或者让子进程共享父进程的标准输入输出流,或者直接忽略子进程的输入输出。

    6、进程间如何通讯

      在Linux系统下,进程之间可以通过信号互相通信。以下是一个例子。

    /* parent.js */
    var child = child_process.spawn('node', [ 'child.js' ]);
    
    child.kill('SIGTERM');
    
    /* child.js */
    process.on('SIGTERM', function () {
        cleanUp();
        process.exit(0);
    });

      在上例中,父进程通过.kill方法向子进程发送SIGTERM信号,子进程监听process对象的SIGTERM事件响应信号不要被.kill方法的名称迷惑了,该方法本质上是用来给进程发送信号的,进程收到信号后具体要做啥,完全取决于信号的种类和进程自身的代码。

      另外,如果父子进程都是NodeJS进程,就可以通过IPC(进程间通讯)双向传递数据。以下是一个例子。

    /* parent.js */
    var child = child_process.spawn('node', [ 'child.js' ], {
            stdio: [ 0, 1, 2, 'ipc' ]
        });
    
    child.on('message', function (msg) {
        console.log(msg);
    });
    
    child.send({ hello: 'hello' });
    
    /* child.js */
    process.on('message', function (msg) {
        msg.hello = msg.hello.toUpperCase();
        process.send(msg);
    });

      可以看到,父进程在创建子进程时,在options.stdio字段中通过ipc开启了一条IPC通道,之后就可以监听子进程对象的message事件接收来自子进程的消息,并通过.send方法给子进程发送消息。在子进程这边,可以在process对象上监听message事件接收来自父进程的消息,并通过.send方法向父进程发送消息。数据在传递过程中,会先在发送端使用JSON.stringify方法序列化,再在接收端使用JSON.parse方法反序列化。

    7、如何守护子进程

      守护进程一般用于监控工作进程的运行状态,在工作进程不正常退出时重启工作进程,保障工作进程不间断运行。以下是一种实现方式。

    /* daemon.js */
    function spawn(mainModule) {
        var worker = child_process.spawn('node', [ mainModule ]);
    
        worker.on('exit', function (code) {
            if (code !== 0) {
                spawn(mainModule);
            }
        });
    }
    
    spawn('worker.js');

      可以看到,工作进程非正常退出时,守护进程立即重启工作进程。

    转载于:https://www.cnblogs.com/goloving/p/11444077.html

    展开全文
  • forever是一个简单的命令式nodejs的守护进程,能够启动,停止,重启App应用。forever完全基于命令行操作,在forever进程之下,创建node的子进程,通过monitor监控node子进程的运行情况,一旦文件更新,或者进程挂掉...
  • Windows下 nodejs 进程的查看、删除 1.准备工作 任务管理器 以管理员身份 运行cmd 2.查看指定端口号下的进程 :netstat -ano|findstr “端口号” 例子:3000端口 netstat -ano|findstr "3000&...

    1.Windows下 nodejs 进程的查看、删除

    1.准备工作
    任务管理器 以管理员身份 运行cmd

    2.查看指定端口号下的进程 :netstat -ano|findstr “端口号”
    例子:3000端口

    netstat -ano|findstr "3000"
    

    3.根据PID获取进程名称 :tasklist|findstr PID

    tasklist |findstr 5948
    

    4.根据进程名称结束进程 TASKKILL 具体参数查看帮助文件

    taskkill /f /t /im node.exe
    

    2.linux下npm start启动网站,提示“3000”端口被占用问题

    抛出问题:

    开发中关闭cmd命令行或者使用 ctrl + C 关闭node进程无效,依然提示端口被占用。

    解决问题:

    1.linux系统关闭node进程最有效的方法

    命令行输入:ps -ef|grep node,找到当前要关闭的进程代码,例如:kill 14805, 即可关闭node进程。

    展开全文
  • Memeye 是一个轻量级的 NodeJS 进程监控工具
  • nodejs进程异常退出处理方法

    nodejs进程异常退出处理方法

    参考文章:

    (1)nodejs进程异常退出处理方法

    (2)https://www.cnblogs.com/mengff/p/10207154.html

    (3)https://www.javazxz.com/thread-6624-1-1.html


    备忘一下。


    展开全文
  • Nodejs 进程内阻塞 FIFO 队列实现。 具有最大并发的队列。 npm install block-queue 例子 var queue = require ( 'block-queue' ) ; var q = queue ( 1 , function ( task , done ) { // working on task.. ...
  • 最近运维老大j哥找到我说了一个事儿:某私有化部署的线上环境nodejs进程数量多达1000+,对比公版线上环境的66个进程数显得十分诡异。并且单个nodejs进程所占用swap空间也较大,也不释放空间,日积月累下来是一个隐患...

    最近运维老大j哥找到我说了一个事儿:某私有化部署的线上环境nodejs进程数量多达1000+,对比公版线上环境的66个进程数显得十分诡异。并且单个nodejs进程所占用swap空间也较大,也不释放空间,日积月累下来是一个隐患。

    我的debug过程比较顺畅,记录下来以备有同样烦恼者借鉴。

     

    先用top命令发现,系统Task数量高达1300+,然后使用命令:

     

    ps -ef | grep node | wc -l

     

     

    统计出有1306个进程

    ps -ef | grep node 查看进程列表

     

    发现全是:

     

     

     

    问题原因:

    这是npm的一个更新包机制的服务。这些进程一直未释放,所以就导致了Task数过高,由于nodejs进程数超过了最大系统线程池数量,由此可能造成之前request包请求的时候报escokettimeout.

     

    check.js中对如果不能更新成功则子进程一直存活的逻辑,是造成这些进程一直不exit的原因。华西项目是私有化部署在内网中,无法连到外网拉取到更新,所以会一直生成进程而不停止。

     

     

    解决办法:

    先杀死相关 node check.js的进程

     

     pgrep -a node|awk '{print $1}'|xargs kill -9

     

    然后处理更新。

     

    只要让这个更新操作不执行即可,有如下方法:

    1.移除check.js文件即可。

    2.npm相关设置中设置不自动更新参数。(NO_UPDATE_NOTIFIER)

    参考资料:https://www.codercto.com/a/26526.html

    转载于:https://www.cnblogs.com/freephp/p/10729302.html

    展开全文
  • 项目以antDesign为主体实现,在线上运行时,偶发性的出现因为系统异常导致nodejs进程被kill掉的情况,又因为nodejs为单线程架构,一旦nodejs进程被kill,无法完成自动重启,又因为antDesign的实现底层是依赖与...
  • 一次关闭所有nodejs进程

    千次阅读 2020-03-04 16:46:35
    部署rap2的时候遇到nodejs的命令窗口关闭后不断重启打开的情况,最后直接 杀死所有进程,记下命令: taskkill /f /t /im node.exe
  • 在不同的浏览器选项卡或nodejs进程之间发送数据的BroadcastChannel +领导者通过渠道选举 一个BroadcastChannel,允许您在不同的浏览器选项卡或nodejs进程之间发送数据。 它完全可以在客户端和离线运行。 在旧的...
  • 多节点为TCP / HTTP服务提供了多个NodeJS进程的启动。 使用多节点,添加使用多个进程来同时服务HTTP请求非常简单,只需将http.Server对象传递给listen函数: var server = require("http").createServer(function...
  • 添加auto.js文件,放在app.js一个... package.json文件中配置,目的是启动项目很方便,cmd到对应的文件夹下,直接npm start 即可启动node项目,也就是我这个自动重启进程 "scripts": { "start": "node ./auto.js" }
  • nodejs中只支持单线程。在操作系统中,每个应用程序都是一个进程类的实例对象。在nodejs中,就是使用process对象来代表nodejs应用程序。 process对象是一个全局对象,具有一些可被用来获取nodejs应用程序以及运行...
  • node-ph7 - NodeJS进程内 PHP。 这个很酷的扩展允许你从 nodejs 内部运行基于 5.3.3 标准的 PHP 代码。 它有一个非常干净的 API,旨在简单而有用。 它仍然缺乏一些配置,但它可以做应该做的事情。 安装 与每个 ...
  • 日常进行CI过程中,使用NodeJs方式:GIT更新->检测是否需要编译->调用IncrediBuilder编译->读取编译日志判断是否通过->调用7z打包 问题: 持续进行一天(约18)小时候,会报错:JavaScript heap out ...
  • nodejs进程后台运行

    千次阅读 2014-11-09 01:17:40
    node xxxx.js &
  • windows安装nodejs过程

    2019-11-08 19:15:20
    电脑重装了,各种环境也需要全部重装,借此机会,记录全部环境的安装过程,python只是其中之一 废话不多说,一图胜千言 nodejs下载地址 步骤: 1.下载msi文件,双击安装,并修改安装目录 2.配置环境变量 3.验证...
  • pkill node 转载于:https://www.cnblogs.com/pangguoming/p/7627019.html
  • nodejs搭建的项目,经常莫名奇妙的挂了,网上通篇都是说用forever去维护,但是我觉得pm2比这个好,具体安装如连接:http://www.jianshu.com/p/fdc12d82b661 首先需要安装pm2: npm install -g pm2 安装即可完成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,871
精华内容 26,748
关键字:

nodejs子进程