process
是 Node.js 中的一个全局对象,提供了与当前 Node.js 进程相关的信息和控制能力。它不需要通过 require()
引入即可使用。
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; // 调试器使用的端口
process.env; // 包含用户环境变量的对象
process.env.HOME; // 访问特定环境变量
process.env.NODE_ENV = 'production'; // 设置环境变量(只影响当前进程)
process.cwd(); // 返回当前工作目录
process.chdir('/tmp'); // 改变当前工作目录
process.exit(1); // 立即退出进程,可指定退出码(默认0)
process.exitCode = 1; // 设置退出码,进程正常退出时使用
// 正常退出前执行的钩子
process.on('exit', (code) => {
console.log(`About to exit with code: ${code}`);
});
// 捕获中断信号 (如 Ctrl+C)
process.on('SIGINT', () => {
console.log('Received SIGINT. Press Control-D to exit.');
});
// 其他常见信号: SIGTERM, SIGHUP, SIGKILL 等
process.stdin; // 标准输入流 (可读流)
process.stdout; // 标准输出流 (可写流)
process.stderr; // 标准错误流 (可写流)
// 示例:从标准输入读取数据
process.stdin.on('data', (data) => {
console.log(`Received: ${data}`);
});
process.stdout.write('Hello'); // 类似 console.log 但更底层
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+)
const { performance } = require('perf_hooks');
performance.nodeTiming; // Node.js 启动阶段的计时信息
// 子进程相关
process.connected; // 是否通过 IPC 通道连接
process.send(message); // 向父进程发送消息
process.disconnect(); // 关闭 IPC 通道
// 接收消息
process.on('message', (msg) => {
console.log('Message from parent:', msg);
});
// 退出事件
process.on('exit', (code) => {});
// 未捕获异常
process.on('uncaughtException', (err) => {});
// 未处理的 Promise rejection
process.on('unhandledRejection', (reason, promise) => {});
// 警告事件
process.on('warning', (warning) => {});
// 信号事件
process.on('SIGTERM', () => {});
process.on('beforeExit', (code) => {}); // 事件循环为空但进程未退出时触发
process.on('disconnect', () => {}); // IPC 通道关闭时触发
process.on('multipleResolves', (type, promise, reason) => {}); // Promise 多次 resolve/reject
process.config; // Node.js 构建时的配置信息
process.features; // 启用的特性
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)
process.report.writeReport([filename]); // 生成诊断报告
process.report.directory; // 报告目录
process.report.filename; // 报告文件名
process.report.reportOnFatalError; // 致命错误时是否生成报告
process.report.reportOnSignal; // 收到信号时是否生成报告
process.report.reportOnUncaughtException; // 未捕获异常时是否生成报告
process.report.signal; // 触发报告的信号
process.setSourceMapsEnabled(true); // 启用源映射支持(Node.js v12.12+)
process.allowedNodeEnvironmentFlags; // 允许的NODE_OPTIONS标志
process.report.getReport([err]); // 获取诊断报告
process.emitWarning(message, [options]); // 发出自定义警告
process.env
是环境变量的快照,修改它只影响当前进程
process.exit()
会强制终止进程,可能导致未完成的异步操作被中断
nextTick
回调会在事件循环的当前阶段立即执行,比 setImmediate
更优先
在生产环境中应始终处理 uncaughtException
和 unhandledRejection
事件
process
模块是 Node.js 中与进程交互的核心接口,提供了丰富的功能来控制系统进程、获取运行时信息、处理信号和异常等。它是 Node.js 程序与操作系统环境交互的重要桥梁。