node系列扯犊子之九process对象

process对象是 Node 的一个全局对象,提供当前 Node 进程的信息。它可以在脚本的任意位置使用,不必通过require命令加载。该对象部署了EventEmitter接口。

属性

process对象提供一系列属性,用于返回系统信息。

process.argv:返回一个数组,成员是当前进程的所有命令行参数。
process.env:返回一个对象,成员为当前Shell的环境变量,比如process.env.HOME。
process.installPrefix:返回一个字符串,表示 Node 安装路径的前缀,比如/usr/local。相应地,Node 的执行文件目录为/usr/local/bin/node。
process.pid:返回一个数字,表示当前进程的进程号。
process.platform:返回一个字符串,表示当前的操作系统,比如Linux。
process.title:返回一个字符串,默认值为node,可以自定义该值。
process.version:返回一个字符串,表示当前使用的 Node 版本,比如v7.10.0。

process.stdout属性返回一个对象,表示标准输出。该对象的write方法等同于console.log,可用在标准输出向用户显示内容。
注:由于process.stdout和process.stdin与其他进程的通信,都是流(stream)形式,所以必须通过pipe管道命令中介。

var fs = require('fs');
var zlib = require('zlib');

fs.createReadStream('wow.txt')
  .pipe(zlib.createGzip())
  .pipe(process.stdout);

上面代码通过pipe方法,先将文件数据压缩,然后再导向标准输出。

process.stdin返回一个对象,表示标准输入。

process.stderr属性指向标准错误。
process.execPath属性返回执行当前脚本的Node二进制文件的绝对路径。
process.execArgv属性返回一个数组,成员是命令行下执行脚本时,在 Node 可执行文件与脚本文件之间的命令行参数。

方法

process对象提供以下方法:

process.chdir():切换工作目录到指定目录。
process.cwd():返回运行当前脚本的工作目录的路径。
process.exit():退出当前进程。
process.getgid():返回当前进程的组ID(数值)。
process.getuid():返回当前进程的用户ID(数值)。
process.nextTick():指定回调函数在当前执行栈的尾部、下一次Event Loop之前执行。
process.on():监听事件。
process.setgid():指定当前进程的组,可以使用数字ID,也可以使用字符串ID。
process.setuid():指定当前进程的用户,可以使用数字ID,也可以使用字符串ID。

process.kill方法用来对指定ID的线程发送信号,默认为SIGINT信号。用于杀死当前进程。

事件

1、exit事件

当前进程退出时,会触发exit事件,可以对该事件指定回调函数。

2、beforeExit事件

beforeExit事件在Node清空了Event Loop以后,再没有任何待处理的任务时触发。正常情况下,如果没有任何待处理的任务,Node进程会自动退出,设置beforeExit事件的监听函数以后,就可以提供一个机会,再部署一些任务,使得Node进程不退出。
beforeExit事件与exit事件的主要区别是,beforeExit的监听函数可以部署异步任务,而exit不行。
此外,如果是显式终止程序(比如调用process.exit()),或者因为发生未捕获的错误,而导致进程退出,这些场合不会触发beforeExit事件。因此,不能使用该事件替代exit事件。

3、uncaughtException事件

当前进程抛出一个没有被捕捉的错误时,会触发uncaughtException事件。

4、信号事件

操作系统内核向Node进程发出信号,会触发信号事件。实际开发中,主要对SIGTERM和SIGINT信号部署监听函数,这两个信号在非Windows平台会导致进程退出,但是只要部署了监听函数,Node进程收到信号后就不会退出。

进程的退出码

进程退出时,会返回一个整数值,表示退出时的状态。这个整数值就叫做退出码。下面是常见的Node进程退出码。

0,正常退出
1,发生未捕获错误
5,V8执行错误
8,不正确的参数
128 + 信号值,如果Node接受到退出信号(比如SIGKILL或SIGHUP),它的退出码就是128加上信号值。由于128的二进制形式是10000000, 所以退出码的后七位就是信号值。

参考链接:

http://javascript.ruanyifeng.com/nodejs/process.html

posted on 2021-05-09 09:07  随便聊聊然后记住我id  阅读(172)  评论(0编辑  收藏  举报

导航