Node.js:process模块

process 是 Node.js 中的一个全局对象,提供了与当前 Node.js 进程相关的信息和控制能力。它不需要通过 require() 引入即可使用。

一、进程信息

1. 基础信息属性

process.pid; // 当前进程的 PID
process.ppid; // 父进程的 PID (Node.js v10+)
process.title; // 进程名称(可修改)
process.arch; // CPU 架构,如 'x64', 'arm'
process.platform; // 操作系统平台,如 'linux', 'darwin', 'win32'
process.version; // Node.js 版本
process.versions; // Node.js 及其依赖的版本信息对象
process.release; // Node.js 发布信息
process.argv; // 命令行参数数组
process.execArgv; // Node.js 特定的命令行选项
process.execPath; // Node.js 可执行文件的绝对路径
process.argv0; // process.argv[0] 的原始值
process.debugPort; // 调试器使用的端口

2. 环境变量

process.env; // 包含用户环境变量的对象
process.env.HOME; // 访问特定环境变量
process.env.NODE_ENV = 'production'; // 设置环境变量(只影响当前进程)

二、进程执行与控制

1. 工作目录

process.cwd(); // 返回当前工作目录
process.chdir('/tmp'); // 改变当前工作目录

2. 进程退出

process.exit(1); // 立即退出进程,可指定退出码(默认0)
process.exitCode = 1; // 设置退出码,进程正常退出时使用

// 正常退出前执行的钩子
process.on('exit', (code) => {
  console.log(`About to exit with code: ${code}`);
});

3. 信号处理

// 捕获中断信号 (如 Ctrl+C)
process.on('SIGINT', () => {
  console.log('Received SIGINT. Press Control-D to exit.');
});

// 其他常见信号: SIGTERM, SIGHUP, SIGKILL 等

三、输入输出

1. 标准流

process.stdin; // 标准输入流 (可读流)
process.stdout; // 标准输出流 (可写流)
process.stderr; // 标准错误流 (可写流)

// 示例:从标准输入读取数据
process.stdin.on('data', (data) => {
  console.log(`Received: ${data}`);
});

2. 控制台方法

process.stdout.write('Hello'); // 类似 console.log 但更底层

四、性能与监控

1. 资源使用

process.uptime(); // 进程已运行时间(秒)
process.hrtime(); // 高精度时间 [秒, 纳秒]
process.cpuUsage(); // CPU 使用情况 { user, system }(微秒)
process.memoryUsage(); // 内存使用情况
/*
{
  rss: Resident Set Size,
  heapTotal: V8 堆内存总量,
  heapUsed: V8 堆已用内存,
  external: C++ 对象占用的内存,
  arrayBuffers: ArrayBuffer 和 SharedArrayBuffer 占用的内存
}
*/
process.resourceUsage(); // 资源使用统计(Node.js v12+)

2. 性能钩子

const { performance } = require('perf_hooks');
performance.nodeTiming; // Node.js 启动阶段的计时信息

五、进程间通信 (IPC)

// 子进程相关
process.connected; // 是否通过 IPC 通道连接
process.send(message); // 向父进程发送消息
process.disconnect(); // 关闭 IPC 通道

// 接收消息
process.on('message', (msg) => {
  console.log('Message from parent:', msg);
});

六、事件

1. 常用事件

// 退出事件
process.on('exit', (code) => {});

// 未捕获异常
process.on('uncaughtException', (err) => {});

// 未处理的 Promise rejection
process.on('unhandledRejection', (reason, promise) => {});

// 警告事件
process.on('warning', (warning) => {});

// 信号事件
process.on('SIGTERM', () => {});

2. 其他事件

process.on('beforeExit', (code) => {}); // 事件循环为空但进程未退出时触发
process.on('disconnect', () => {}); // IPC 通道关闭时触发
process.on('multipleResolves', (type, promise, reason) => {}); // Promise 多次 resolve/reject

七、配置与调试

1. 配置相关

process.config; // Node.js 构建时的配置信息
process.features; // 启用的特性

2. 调试相关

process._debugProcess(pid); // 调试指定 PID 的进程
process._debugEnd(pid); // 结束调试
process.debugPort; // 调试端口

八、其他实用方法

process.abort(); // 立即中止进程,生成核心转储文件
process.umask([mask]); // 获取或设置文件模式创建掩码
process.kill(pid, [signal]); // 向指定 PID 发送信号
process.nextTick(callback); // 将回调放入下一个事件循环
process.getuid(); // 获取用户身份标识(POSIX)
process.getgid(); // 获取组身份标识(POSIX)
process.geteuid(); // 获取有效用户身份(POSIX)
process.getegid(); // 获取有效组身份(POSIX)
process.getgroups(); // 获取补充组ID数组(POSIX)
process.initgroups(user, extraGroup); // 初始化组访问列表(POSIX)

九、Node.js 特定功能

1. 报告功能

process.report.writeReport([filename]); // 生成诊断报告
process.report.directory; // 报告目录
process.report.filename; // 报告文件名
process.report.reportOnFatalError; // 致命错误时是否生成报告
process.report.reportOnSignal; // 收到信号时是否生成报告
process.report.reportOnUncaughtException; // 未捕获异常时是否生成报告
process.report.signal; // 触发报告的信号

2. 源映射支持

process.setSourceMapsEnabled(true); // 启用源映射支持(Node.js v12.12+)

十、安全相关

process.allowedNodeEnvironmentFlags; // 允许的NODE_OPTIONS标志
process.report.getReport([err]); // 获取诊断报告
process.emitWarning(message, [options]); // 发出自定义警告

使用注意事项

  1. process.env 是环境变量的快照,修改它只影响当前进程

  2. process.exit() 会强制终止进程,可能导致未完成的异步操作被中断

  3. nextTick 回调会在事件循环的当前阶段立即执行,比 setImmediate 更优先

  4. 在生产环境中应始终处理 uncaughtException 和 unhandledRejection 事件

总结

process 模块是 Node.js 中与进程交互的核心接口,提供了丰富的功能来控制系统进程、获取运行时信息、处理信号和异常等。它是 Node.js 程序与操作系统环境交互的重要桥梁。

你可能感兴趣的:(Node.js:process模块)