前言
本文主要对 Node.js 中进程管理相关的东西做一个简单介绍,包括 process 对象、child_process 模块和cluster 模块,详细的 API 可以查看官方文档,下面来看看详细的介绍吧。
Process 对象
process 是 Node.js 的一个全局对象,可以在任何地方直接使用而不需要 require 命令加载。process 对象提供了 当前 node 进程 的命令行参数、标准输入输出、运行环境和运行状态等信息。
常用属性
argv
process.argv
属性返回一个数组,第一个元素是 node,第二个元素是脚本文件名称,其余成员是脚本文件的参数。
$ node process-2.js one two=three four0: /usr/local/bin/node1: /Users/mjr/work/node/process-2.js2: one3: two=three4: four
env
process.env 返回一个对象,包含了当前 Shell 的所有环境变量,比如:
{ TERM: 'xterm-256color', SHELL: '/bin/zsh', USER: 'huangtengfei', PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', PWD: '/Users/huangtengfei', HOME: '/Users/huangtengfei'}
这个属性通常的使用场景是,新建一个 NODE_ENV 变量,用来确定当前所处的开发阶段,生成阶段设为 production,开发阶段设为 develop ,然后在脚本中读取 process.env.NODE_ENV
再做相应处理即可。
运行脚本时可以这样改变环境变量:
$ export NODE_ENV=production && node app.js# 或者$ NODE_ENV=production node app.js
stdin/stdout
process.stdin
指向标准输入(键盘到缓冲区里的东西),返回一个可读的流:
process.stdin.setEncoding('utf8');process.stdin.on('readable', () => { var chunk = process.stdin.read(); if (chunk !== null) { process.stdout.write(`data: ${chunk}`); }});process.stdin.on('end', () => { process.stdout.write('end');});
process.stdout 指向标准输出(向用户显示内容),返回一个可写的流:
const fs = require('fs');fs.createReadStream('wow.txt') .pipe(process.stdout);
常用方法
cwd()
process.cwd()
返回运行 Node 的工作目录(绝对路径),比如在目录 /Users/huangtengfei/abc 下执行 node server.js,那么 process.cwd()
返回的就是 /Users/huangtengfei/abc。
另一个常用的获取路径的方法是 __dirname,它返回的是执行文件时该文件在文件系统中所在的目录。注意 process.cwd()
和 __dirname
的不同,前者是进程发起时的位置,后者是脚本的位置,两者可能不一致。
on()
process 对象部署了 EventEmitter 接口,可以使用 process.on()
方法监听各种事件,并指定回调函数。比如监听到系统发出进程终止信号时关闭服务器然后退出进程:
新闻热点
疑难解答
图片精选