Node之进程

Node.js中的进程

在操作系统中,每个应用程序都是一个进程类的实例对象。在Node.js中,使用process对象代表Node.js应用程序。该对象是一个全局对象,可以在REPL环境中或任何模块中访问该对象。该对象具有一些可被用来获取Node.js应用程序以及运行该应用程序的用户、运行环境的各种信息的属性、方法与事件。

进程对象的属性

Node.js中的进程对象具有的属性及属性值如下。

  • execPath:属性值为用来运行应用程序的可执行文件的绝对路径,例如“C:\Program Files\node.js\node.exe”。
  • version:属性值为Node.js的版本号,例如“v0.10.13”。
  • versions:属性值为Node.js及其各依赖的版本号。
  • platform:属性值为当前运行Node.js的平台,例如“darwin”、“freebsd”、“linux”、“sunos”或者“win32”。
  • stdin:属性值为一个可用于读入标准输入流的对象。在默认情况下,标准输入流处于暂停状态,必须使用如下所示的方法恢复读取标准输入流数据。
process.stdin.resume();
  • stdout:属性值为一个可用于写入标准输出流的对象
  • stderr:属性值为一个可用于写入标准错误输出流的对象,与其他用于写入流数据的对象不同的是,process.stdout对象与process.stderr对象的写数据操作是一种阻塞型操作,只有当使用其他读取流数据的对象的pipe方法,并且将process.stdout对象或process.stderr对象作为目标对象的时候,process.stdout对象与process.stderr对象的写数据操作才是非阻塞型操作。
  • argv:属性值为一个数组,其中包含了运行Node.js应用程序时的所有命令行参数。数组中第一个元素为“node”,第二个元素为运行的脚本文件名,从第三个元素开始为其他命令行参数。例如,针对“node app.js one two three four”命令来说,argv数组中的内容如下所示:['node','app.js','one','two','three','four']。
  • env:属性值为一个对象,其中包含了运行Node.js应用程序的操作系统环境信息。
  • config:属性值为一个对象,其中包含了用于编译当前Node应用程序的可执行文件的配置选项的JavaScript描述。
  • pid:属性值为运行当前Node.js应用程序的进程的PID。
  • title:属性值为运行Node.js应用程序的命令行窗口的标题。
  • arch:属性值为运行Node.js应用程序的处理器架构,例如“arm”、“ia32”或“x64”。

接下来看一个process.stdin对象与process.stdout对象的使用示例。在该示例代码中,我们指定当用户在Node.js应用程序的进程中输入数据后,立即输出“进程接收到数据:”字符串+用户输入数据。

process.stdin.resume();
process.stdin.on('data', function (chunk) {
  process.stdout.write('进程接收到数据: '+ chunk);
});

接下来看一个process.argv属性的代码使用示例。在该示例代码中,我们使用JavaScript中的forEach方法对process.argv属性值数组进行遍历,并且数组中每一个元素的序号及元素在控制台中输出。

process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});

进程对象的方法与事件

Node.js中的进程对象具有的方法如下。

memoryUsage方法

memoryUsage方法用于获取运行Node.js应用程序的进程的内存使用量。

process.memoryUsage()
  • rss:属性值为一个整数,表示运行Node.js应用程序的进程的内存消耗量,单
    位为字节。
  • heapTotal:属性值为一个整数,表示为V8所分配的内存量,单位为字节。
  • heapUsed:属性值为一个整数,表示V8的内存消耗量,单位为字节。
  • external:属性值为一个整数,表示外部内存量,单位为字节。
nextTick方法

nextTick方法用于将一个函数推迟到代码中所书写的下一个同步方法执行完毕时或异步方法的事件回调函数开始执行时调用

process.nextTick(callback)

在nextTick方法中,使用一个参数,参数值为被推迟的函数。

虽然nextTick方法与setTimeout方法均可用于将一个函数推迟调用,但是在调用该函数时,nextTick方法中指定的函数的调用速度要比setTimeout方法中指定的函数的调用速度快很多。

在Node.js中,提供了一个process.maxTickDepth属性,默认的属性值为1000。在Node.js v0.10版中,当递归深度达到process.maxTickDepth属性值之后,允许递归函数之外的代码继续执行。

abort方法

abort方法用于向运行Node.js应用程序的进程发出SIGABRT信号,使进程异常终止,同时产生一个核心文件。该方法中不使用任何参数。

chdir方法

chdir方法用于修改Node.js应用程序中使用的当前工作目录,

process.chdir(directory)

该方法使用一个参数,参数值为一个字符串,用于指定当前工作目录,该目录可以为一个相对路径,也可以为一个绝对路径。如果指定路径不存在,则抛出异常。

cwd方法

cwd方法用于返回当前目录,不使用任何参数。

exit方法

exit方法用于退出运行Node.js应用程序的进程

process.exit([code])

exit方法中使用一个整数值参数,该参数用于指定为操作系统提供退出代码,该代码为0时表示正常退出,不使用该参数时的默认参数值为0。

getgid方法

getgid方法返回运行Node.js应用程序的进程的组ID,该方法只在POSIX(即非Windows)操作系统中有效,不使用任何参数。

setgid方法

setgid方法用于设置运行Node.js应用程序的进程的组ID,该方法只在POSIX(即非Windows)操作系统中有效

process.setgid(id)
getuid方法

getuid方法返回运行Node.js应用程序的进程的用户ID,该方法只在POSIX(即非Windows)操作系统中有效,不使用任何参数。

setuid方法

setuid方法用于设置运行Node.js应用程序的进程的用户ID,该方法只在POSIX(即非Windows)操作系统中有效

process.setuid(id)

setgid方法中使用一个参数,参数值可以为一个数值类型的用户ID,也可以为一个字符串类型的用户名,如果指定用户名,该用户名将被自动解析为用户ID。

getgroups方法

getgroups方法返回由运行Node.js应用程序的进程的所有附属组ID构成的数组,该方法只在POSIX(即非Windows)操作系统中有效,不使用任何参数。如果Node.js应用程序确认所有附属组ID均有效,则getgroups方法返回undefined。

setgroups方法

setgroups方法用于设置运行Node.js应用程序的进程的所有附属组ID,该方法只在POSIX(即非Windows)操作系统中有效,且使用该方法者必须为root用户或具有CAP_SETGID权限。

process.setgroups(groups)
  • groups:参数值为一个数组,其中存放所有被设置的附属组ID或组名。
initgroups方法

initgroups方法用于使用一个指定用户的所有归属组来初始化/etc/group组列表,该方法只在POSIX(即非Windows)操作系统中有效,且使用该方法者必须为root用户或具有CAP_SETGID权限。

process.initgroups(user,extra_group)
  • user:用于指定用户名或用户ID
  • extra_group:用于指定初始化etc/group组列表时可以追加的组名或组ID。
kill方法

kill方法用于向一个进程发送信号

process.kill(pid,[signal])
  • pid:参数值为一个整数,用于指定需要接收信号的进程ID
  • signal:用于指定需要发送的信号,例如“SIGINT”或“SIGUSR1”。
umask方法

umask方法用于读取或修改运行Node.js应用程序的进程的文件权限掩码。子进程将继承父进程的文件权限掩码。

process.umask([mask])

在umask方法中,使用一个可选参数,该参数值用于设定修改后的文件权限掩码,例如0644。如果不使用该参数,umask方法返回进程当前使用的文件权限掩码,如果使用该参数,umask方法返回修改前的文件权限掩码。

uptime方法

uptime方法返回Node.js应用程序的当前运行时间,单位为秒,该方法不使用任何参数。

process.uptime()
hrtime方法

hrtime方法主要用于测试一个代码段的运行时间,时间精度可以精确到毫秒。该方法返回一个数组,数组中返回两个时间,第一个时间单位为秒,第二个时间单位为纳秒。

process.hrtime(time);

完整示例:

var fs=require('fs');
var time = process.hrtime();
var data=fs.readFileSync('./app.js');
var diff = process.hrtime(time);
console.log('读文件操作耗费%d纳秒。', diff[0] * 1e9 + diff[1]);

Node.js中的进程对象可能触发的事件

exit事件

当运行Node.js应用程序的进程退出时触发进程对象的exit事件。可以通过指定事件回调函数来指定进程退出时所需执行的处理,在该回调函数中不使用任何参数。

process.on('exit', function() {
    console.log('Node.js进程被退出。');
});
process.exit();
uncaughtException事件

当Node.js应用程序中抛出了一个未被捕捉的异常时触发进程对象的uncaughtException事件。可以通过对该事件指定回调函数的方法来指定对所有异常的默认处理,以避免应用程序的异常退出,在该回调函数中使用一个参数,参数值为抛出的异常对象。

process.on('uncaughtException', function(err) {
    console.log('捕捉到一个未被处理的错误:'+err);
});
nonexistentFunc();

你可能感兴趣的:(Node之进程)