node之process模块

2018-11-01  本文已影响0人  imakan

process --进程

process对象是一个全局对象,他提供当前Node.js进程相关的有关信息,以及控制当前Nodejs进程,因为是全局变量,所以不需要require

process 事件

process对象是EventEmitter的实例

beforeExit事件

NodeEventLoop为空时,并且没有额外的工作被添加进来,事件beforeExit会被触发。正常情况下,如果没有额外的工作被添加EventLoopNodejs进程会结束,但是如果beforeExit事件绑定的监听器的回调函数中,含有一个可以进行异步调用的操作,那么Nodejs进程会继续进行。
process.exitCode作为唯一的参数值传递给beforeExit事件监听器的回调函数。
如果进程是由显式的错误导致终止,则beforeExit事件不会被触发。

disconnect事件

如果node进程是由IPC通道方式创建的,当IPC通道关闭是,会触发disconnect事件

exit事件

两种情况下exit事件会被触发

process.on('exit',(code) => {
  console.log(code)
  setTimeout(() => {
    console.log('该函数不会被执行')
  })
})

message事件

如果Node.js进程是由IPC通道的方式创建的,当子进程收到父进程发送的消息时,childprocess_send()发送,会触发message事件

multipleResolve事件

process.on('multipleResolves', (type, promise, reason) => {
  console.error(type, promise, reason);
  setImmediate(() => process.exit(1));
})
async function main() {
  try {
    return await new Promise((resolve, reject) => {
      resolve('First call');
      resolve('Swallowed resolve');
      reject(new Error('Swallowed reject'));
    });
  } catch {
    throw new Error('Failed');
  }
}
main().then(console.log);

'uncaughtException' 事件

如果 Javascript 未捕获的异常,沿着代码调用路径反向传递回事件循环,会触发 'uncaughtException' 事件。 Node.js 默认情况下会将这些异常堆栈打印到 stderr 然后进程退出。 为 'uncaughtException' 事件增加监听器会覆盖上述默认行为。

正确使用uncaughtException事件的方式,是用它在进程结束前执行一些已分配资源(比如文件描述符,句柄等等)的同步清理操作。触发uncaughtException事件后,用它来尝试恢复应用正常运行的操作是不安全的。

unhandledRejection事件

function SomeResource() {
  // 将 loaded 的状态设置为一个 rejected promise。
  this.loaded = Promise.reject(new Error('错误信息'));
}

const resource = new SomeResource();
// resource.loaded 上没有 .catch 或 .then。

warning事件

任何时候Node,js发出进程告警,都会触发waring事件
'warning'事件监听器的回调函数,参数只有一个,其值为Error 对象。此对象有三个重要的属性用来描述告警:

process.on('warning', (warning) => {
  console.warn(warning.name);    // 打印告警名称
  console.warn(warning.message); // 打印告警信息
  console.warn(warning.stack);   // 打印堆栈信息
});

process.abort()

process.abort()方法会使Node.js进程立即结束,并生成一个core文件。

process.arch

process.arch属性返回一个表示操作系统CPU架构的字符串,Node.js二进制文件是为这些架构编译的。 例如 'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', 或 'x64'。

process.argv

process.argv 属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数。第一个元素为process.execPath。如果需要获取argv[0]的值请参见 process.argv0。第二个元素为当前执行的JavaScript文件路径。剩余的元素为其他命令行参数。

process.argv0

process.argv0属性,保存Node.js启动时传入的argv[0]参数值的一份只读副本。

process.channel

如果Nodejs进程是由IPC channel 方式创建的,process.channel属性保存IPC channer的引用,如果IPC channel 不存在,此属性值为undefined

process.chdir(directory)

process.chdir()方法变更Node.js进程的当前工作目录,如果变更目录失败会抛出异常(相当于linux的cd命令)

process.config

process.config属性返回一个JavaScript对象。此对象描述了用于变异当前Node执行程序时设计的配置信息。这与执行./configure脚本生成的config.gypi文件结果是一样的
process.config属性值不是只读的,在Node.js生态系统中已经有模块扩展,修改或完全替换了process.config的值

process.connected

如果Node.js进程是由IPC channel 方式创建的,只要IPC channel 保持连接,process.connected属性就会返回true。process.disconnect()被调用后,此属性返回false
process.connected如果为false,则不能通过IPC channel 使用process.send()发送消息

process.cpuUsage([previousValue])

process.cpuUsage()方法返回包含当前进程的用户CPU时间和系统CPU时间的对象

process.cwd()

process.cwd()方法返回nodejs进程当前工作

process.debugPort()

nodejs debug的端口

process.disconnect()

如果Node.js进程是从IPC频道派生出来的,process.disconnect()函数会关闭到父进程的IPC频道,以允许子进程一旦没有其他链接来保持活跃就关闭

process.emitWarning()

process.emitWarning()方法可用于发出定制的或应用特定的进程警告。 可以通过给process.on('warning')事件增加处理器,监听这些警告。

// Emit a warning with a code and additional detail.
process.emitWarning('Something happened!', {
  code: 'MY_WARNING',
  detail: 'This is some additional information'
});
// Emits:
// (node:56338) [MY_WARNING] Warning: Something happened!
// This is some additional information
process.on('warning', (warning) => {
  console.warn(warning.name);    // 'Warning'
  console.warn(warning.message); // 'Something happened!'
  console.warn(warning.code);    // 'MY_WARNING'
  console.warn(warning.stack);   // Stack trace
  console.warn(warning.detail);  // 'This is some additional information'
});

process.env

process.env属性返回一个包含用户环境信息的对象

在process.env中新增一个属性,会将属性值转换成字符串

process.env.foo = 'bar';
console.log(process.env.foo);

process.execArgv

process.execAargv属性返回当Node.js进程被启动时,Node.js特定的命令行选项。这些选项在process.argv属性返回的数组中不会出现

 node --harmony script.js --version

process.execArgv的结果

['--harmony']

process.execPath

返回启动Node进程的可执行文件所在的绝对路径

process.exit([code])

process.exit()方法以结束状态码code指示Node.js同步终止进程。如果code为提供。次exit方法要么使用sucess状态码0,要么使用process.exitCode属性值

process.getegid()

返回Node进程的有效数字标记的组身份

process.geteuid()

返回node进程有效数字标记的用户身份

process.getgid()

返回node进程的数字标记的组身份

process.getgroups()

返回数组,其中包含了补充的组ID。

process.getuid()

返回node进程的数字标记的用户身份

process.hrtime([time])

process.hrtime()方法返回当前时间以[seconds, nanoseconds] tuple Array表示的高精度解析值, nanoseconds是当前时间无法使用秒的精度表示的剩余部分。
process.hrtime()返回的时间,都是相对于过去某一时刻的值,与一天中的时钟时间没有关系,因此不受制于时钟偏差。 此方法最主要的作用是衡量间隔操作的性能:

const NS_PER_SEC = 1e9;
const time = process.hrtime();
// [ 1800216, 25 ]

setTimeout(() => {
  const diff = process.hrtime(time);
  // [ 1, 552 ]

  console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`);
  // benchmark took 1000000552 nanoseconds
}, 1000);

process.kill(pid[,signal])

process.kill()方法将signal发送给pid标识的进程。

process.on('SIGHUP', () => {
  console.log('Got SIGHUP signal.');
});

setTimeout(() => {
  console.log('Exiting.');
  process.exit(0);
}, 100);

process.kill(process.pid, 'SIGHUP');

process.mainModule

process.mainModule属性提供了一种获取require.main的替代方式,区别在与,若主模块在运行时中发生改变。require.main可能仍然指向变化之前所依赖的模块 一般来说,假定require.mainprocess.mainModule引用相同的模块是安全的。

process.memoryUsage()

返回node进程的内存使用情况的对象

process.nextTick(callback[,...args])

process.nextTick()方法将callback添加到“next tick 队列”。一旦当前事件轮询队列的任务全部完成,在next tick 队列中的所有callback 会被依次调用

process.pid

返回进程的PID

process.platform

process.platform属性返回字符串,标识Node.js进程运行其上的操作系统平台。

process.ppid

返回当前父进程的进程ID

process.release

返回node的相关信息

{
  name: 'node',
  lts: 'Argon',
  sourceUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5.tar.gz',
  headersUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5-headers.tar.gz',
  libUrl: 'https://nodejs.org/download/release/v4.4.5/win-x64/node.lib'
}

process.send(message[,sendHandle[,option]],callback])

如果node进程是通过IPC通信产生的,那么process.send()可以与父进程通信,发送消息

process.setegid(id)

process.setegid()方法为进程设置有效的用户组ID。(请看 setegid(2).) id可以传一个数值ID或传一个用户组名称字符串。如果传了后者的话,会解析成一个相关的数值ID, 解析的时候,这个方法方法是阻塞的。

process.seteuid(id)

process.seteuid()方法为进程设置有效的用户ID。(请看 seteuid(2).) id可以传一个数值ID或传一个用户名字符串。如果传了特定的用户名字符串,会解析成一个相关的数值ID, 解析的时候,这个方法方法是阻塞的。

process.setgid(id)

process.setgid() 为进程方法设置组ID. (查看setgid(2).) 可给id参数传一个数值ID或字符串名。

process.stderr

process.stder返回连接到stderr(fd 2)的流

process.stdin

process.stdin 属性返回连接到 stdin (fd 0)的流。 它是一个net.Socket(它是一个Duplex流),除非 fd 0指向一个文件,在这种情况下它是一个Readable流。

process.stdin.setEncoding('utf8');

process.stdin.on('readable', () => {
  const chunk = process.stdin.read();
  if (chunk !== null) {
    process.stdout.write(`data: ${chunk}`);
  }
});

process.stdin.on('end', () => {
  process.stdout.write('end');
});

process.stdout

process.stdout 属性返回连接到 stdout (fd 1)的流。 它是一个net.Socket (它是一个Duplex流), 除非 fd 1 指向一个文件,在这种情况下它是一个[可写][]流。
例1: 将输入流数据输出到输出流,即输出到终端。

process.stdin.pipe(process.stdout);

process.throwDeprecation

属性表示--throw-deprecation标记是否被设置到当前Node进程上

process.title

process.title 属性用于获取或设置当前进程在ps命令中显示的进程名字

process.umask([mask])

process.umask()方法用于返回或设置Node.js进程的默认创建文件的权限掩码。子进程从父进程继承这个掩码。 不传参数时,默认返回当前掩码,如果传递了参数,创建文件掩码就被设置为参数值,并且返回之前的掩码

const newmask = 0o022;
const oldmask = process.umask(newmask);
console.log(
  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`
);

process.uptime

process.uptime()方法返回当前 Node.js 进程运行时间秒长

process.version()

process.version 属性返回Node.js的版本信息。

process.versions

process.versions属性返回一个对象,此对象列出了Node.js和其依赖的版本信息。 process.versions.modules表明了当前ABI版本,此版本会随着一个C++API变化而增加。 Node.js会拒绝加载模块,如果这些模块使用一个不同ABI版本的模块进行编译。

上一篇下一篇

猜你喜欢

热点阅读