process模块用来与当前进程的互动。process其实完整的写法是global.process
process对象提供了一系列的属性、方法和事件。
一:属性
- process.pid:当前进程的进程号
- process.version:Node的版本,比如v0.10.18
- process.platform:当前系统平台,比如Linux
- process.title:默认值为“node”,可以自定义该值
- process.argv:当前进程的命令行参数数组
- process.env:指向当前shell的环境变量,比如process.env.HOME
- process.execPath:运行当前进程的可执行文件的绝对路径
- process.stdout:指向标准输出
- process.stderr:指向标准错误
- process.stdin: 指向标准输入,用于监听用户的输入。
现在对以上的一些属性进行讲解一下
(1、process.stdout process.stderr,在命令窗口中向用户显示内容
显示结果发现该两个的区别颜色不一样,跟console.log和console.error差不多。
(2、process.stdin ---该方法用于监听用户的输入。
在webstorm中运行之后在控制台处出现光标闪烁,说明可以输入,回车则显示输入的内容。
在cmd命令行下运行也是一样,可以输入,回车之后显示输入的内容,按ctrl+c则可以退出输入。
在nodeJs的旧版本中,默认情况下,输入流是关闭的,要监听处理输入流数据,首先要开启输入流:process.stdin.resume();
不过在新版本中不需要这个了。
我们下面用一个例子来讲标准输入输出结合起来使用:
process.stdin.setEncoding('utf-8');
var a, b;
process.stdout.write("请输入a的值:");
process.stdin.on('data',function(chunk){
if(!a){
a = Number(chunk);
process.stdout.write("请输入b的值:");
}else{
b = Number(chunk);
process.stdout.write("a + b = " +(a+b));
}
});
根据输入步骤输入a , b 的值之后,该段代码的执行结果为:
(3: process.argv 这个是以数组的形式来显示
在cmd下命令下执行结果如下:
可以看出输出的形式是以数组的形式输出的,0:是node命令的绝对路径1:是node执行的js文件的绝对路径,2....(数组的后面主要由执行命令后面跟数据决定)
二:process提供的方法
- process.exit():退出当前进程
- process.cwd():返回运行当前脚本的工作目录的路径
- process.chdir():改变工作目录
- process.nextTick():将一个回调函数放在下次事件循环的顶部
下面我们对process.cwd()来详细的讲解一下
在webstorm下,我们发现执行结果和__dirname的执行结果是一样的,
但是他们两个也有区别,__dirname表示代码js文件所在目录
process.cwd()表示执行node命令的时候(cmd命令行下),我们在哪个目录 current working dir
三:process 方法提供的事件
- exit事件 :当前进程退出时,会触发exit事件
- uncaughtException事件 : 当前进程抛出一个没有被捕捉的意外时,会触发uncaughtException事件
- readable :有东西可以读取的时候就会触发这个事件
- SIGINT : 如在cmd命令行下输入ctrl+C 触发的退出行为
下面我们对一些事件处理进行详细的讲解
(1、readable
上图控制台中绿色框为输入的内容,红色框内的为回车之后读取打印出来的数据。
(2、exit SIGINT
下面我们用一个例子来总体了解一下这两个事件。
这次我们在cmd控制台处运行,运行之后输入2回车之后则打印了2(如下图),祝部分主要是process的stdin属性起的作用
接着我按ctrl+c来进行取消进程,则结果如下图显示,首先是ctrl+c触发了SIGINT事件,所以首先打印了“Program has a signal”;
然后 process.exit();触发了exit事件,所以后面跟着打印了"Program will exit"。