NodeJs-process

 后端   小卒子   2024-09-08 13:19   111
  nodejs

Node.js 中的 process 对象是一个全局对象,代表 Node.js 进程的当前状态和环境信息。它提供了一系列属性和方法,允许开发者与操作系统进行交互、获取环境信息、管理进程生命周期、处理信号等。

以下是对 process 对象所有属性和方法的详细介绍,以及它们的具体使用场景。

1. 概述

process 对象是一个全局对象,因此无需 require 任何模块即可使用。它提供了有关当前 Node.js 进程的关键信息和控制方法。使用 process,你可以管理进程的生命周期、处理系统信号、与父子进程通信以及监控性能。

2. 常用属性

2.1 process.argv

process.argv 是一个数组,包含启动 Node.js 进程时传递的命令行参数。第一个元素是 node 的可执行文件路径,第二个元素是正在执行的脚本文件路径,后续元素是命令行参数。

示例:

console.log(process.argv);
// 输出: ['/usr/local/bin/node', '/path/to/script.js', 'arg1', 'arg2']

2.2 process.env

process.env 是一个包含用户环境信息的对象,例如系统环境变量。可以通过此对象读取或设置环境变量。

示例:

console.log(process.env.PATH);
process.env.MY_VARIABLE = 'hello world';
console.log(process.env.MY_VARIABLE);

2.3 process.cwd()

process.cwd() 返回 Node.js 进程的当前工作目录。

示例:

console.log('当前工作目录:', process.cwd());

2.4 process.version

process.version 返回当前 Node.js 版本的字符串。

示例:

console.log('Node.js 版本:', process.version);

2.5 process.versions

process.versions 返回一个对象,包含 Node.js 和其依赖的版本信息(如 V8 引擎、OpenSSL 等)。

示例:

console.log('版本信息:', process.versions);

2.6 process.pid

process.pid 返回当前进程的进程 ID。

示例:

console.log('当前进程 ID:', process.pid);

2.7 process.ppid

process.ppid 返回当前进程的父进程 ID。

示例:

console.log('父进程 ID:', process.ppid);

2.8 process.title

process.title 用于获取或设置当前进程的标题,该标题会显示在操作系统的进程管理器中。

示例:

console.log('当前进程标题:', process.title);
process.title = 'My Node App';
console.log('新进程标题:', process.title);

2.9 process.platform

process.platform 返回当前操作系统平台的名称,如 'darwin''win32''linux' 等。

示例:

console.log('操作系统平台:', process.platform);

2.10 process.arch

process.arch 返回当前 CPU 的架构,如 'x64''arm' 等。

示例:

console.log('CPU 架构:', process.arch);

2.11 process.uptime()

process.uptime() 返回当前进程已运行的秒数。

示例:

console.log(`进程已运行时间: ${process.uptime()} 秒`);

2.12 process.memoryUsage()

process.memoryUsage() 返回一个对象,显示 Node.js 进程的内存使用情况。

示例:

console.log('内存使用情况:', process.memoryUsage());

2.13 process.hrtime()

process.hrtime() 返回高分辨率的时间差,以 [seconds, nanoseconds] 形式表示,可以用于精确的性能测量。

示例:

const start = process.hrtime();
// 执行一些操作
const end = process.hrtime(start);
console.log(`操作耗时: ${end[0]} 秒和 ${end[1]} 纳秒`);

2.14 process.hrtime.bigint()

process.hrtime.bigint() 返回高分辨率的当前时间,以 BigInt 表示,单位为纳秒。

示例:

const start = process.hrtime.bigint();
// 执行一些操作
const end = process.hrtime.bigint();
console.log(`操作耗时: ${end - start} 纳秒`);

2.15 process.exitCode

process.exitCode 设置或获取进程退出的返回码,通常用于在进程退出前指定退出状态码。

示例:

process.exitCode = 1;  // 表示非正常退出

3. 常用方法

3.1 process.exit()

process.exit() 立即退出 Node.js 进程,并返回指定的退出码(默认是 0 表示成功退出)。

语法:

process.exit([code]);

示例:

if (someError) {
  console.error('发生错误,退出程序');
  process.exit(1);  // 非零表示错误退出
}

3.2 process.abort()

process.abort() 会使 Node.js 进程异常终止并生成一个核心转储文件(如果操作系统支持)。

示例:

process.abort();

3.3 process.kill()

process.kill() 用于向指定的进程发送信号,默认是发送 SIGTERM 信号以终止进程。

语法:

process.kill(pid, [signal]);

示例:

process.kill(process.pid, 'SIGTERM');  // 终止当前进程

3.4 process.chdir()

process.chdir() 用于改变当前工作目录。

示例:

console.log('当前工作目录:', process.cwd());
process.chdir('/tmp');
console.log('新的工作目录:', process.cwd());

3.5 process.on()

process.on() 用于监听 Node.js 进程的事件,例如 exituncaughtException 等。

示例:

process.on('exit', (code) => {
  console.log(`进程退出,退出码: ${code}`);
});

3.6 process.off()

process.off() 用于移除特定事件的监听器。

示例:

const listener = (code) => {
  console.log(`进程退出,退出码: ${code}`);
};
process

.on('exit', listener);
process.off('exit', listener);  // 移除监听器

4. 信号事件

Node.js 支持操作系统的信号事件,例如 SIGINTSIGTERMSIGHUP 等。这些信号可以通过 process.on() 来监听并做相应处理。

示例:

process.on('SIGINT', () => {
  console.log('接收到 SIGINT 信号,进程终止');
  process.exit();
});

常见信号包括:

  • SIGINT: 终止进程(通常由 Ctrl+C 触发)。
  • SIGTERM: 请求正常终止进程。
  • SIGHUP: 终止进程后重启。

5. 标准输入输出流

5.1 process.stdin

process.stdin 是可读流,表示标准输入(例如用户输入)。通常用于从命令行读取输入。

示例:

process.stdin.on('data', (data) => {
  console.log(`输入的数据: ${data}`);
});

5.2 process.stdout

process.stdout 是可写流,表示标准输出。你可以通过它输出数据到命令行。

示例:

process.stdout.write('Hello, World!\n');

5.3 process.stderr

process.stderr 是可写流,表示标准错误输出,通常用于输出错误信息。

示例:

process.stderr.write('发生错误!\n');

6. 使用示例

以下是一个综合示例,演示了如何使用 process 对象的属性和方法:

console.log('进程 ID:', process.pid);
console.log('Node.js 版本:', process.version);
console.log('当前工作目录:', process.cwd());

process.on('exit', (code) => {
  console.log(`进程退出,退出码: ${code}`);
});

process.on('SIGINT', () => {
  console.log('接收到 SIGINT 信号,进程即将退出...');
  process.exit();
});

setTimeout(() => {
  console.log('模拟长时间运行任务...');
}, 5000);

process.stdin.resume();

7. 总结

process 对象为 Node.js 提供了强大的与系统交互的能力。通过它,开发者可以获取进程相关信息、控制进程的生命周期、处理系统信号等。掌握 process 的各种属性和方法对于编写高效、健壮的 Node.js 应用至关重要。