Node.js 中 process 对象的功能与应用

process
是 Node.js 中的一个全局对象,提供了与当前 Node.js 进程相关的信息和控制能力。它允许你访问环境变量、命令行参数、标准输入输出流、进程事件等。process
对象是 Node.js 核心模块的一部分,无需引入即可直接使用。
常用属性
-
process.argv
:- 返回一个数组,包含启动 Node.js 进程时传递的命令行参数。
- 第一个元素是
node
可执行文件的路径,第二个元素是当前执行的 JavaScript 文件的路径,后续元素是传递给脚本的命令行参数。
console.log(process.argv); // 假设执行命令:node app.js arg1 arg2 // 输出: ['/path/to/node', '/path/to/app.js', 'arg1', 'arg2']
-
process.env
:- 返回一个包含用户环境变量的对象。
- 常用于获取或设置环境变量,如
NODE_ENV
用于区分开发和生产环境。
console.log(process.env.NODE_ENV); // 输出: 'development' 或 'production'
-
process.cwd()
:- 返回当前工作目录的路径。
- 与
__dirname
不同,__dirname
返回的是当前模块文件所在的目录。
console.log(process.cwd()); // 输出当前工作目录的路径
-
process.pid
:- 返回当前进程的 PID(进程 ID)。
console.log(process.pid); // 输出当前进程的 PID
-
process.platform
:- 返回运行 Node.js 的操作系统平台,如
'win32'
、'linux'
、'darwin'
(macOS)等。
console.log(process.platform); // 输出: 'win32' 或 'linux' 等
- 返回运行 Node.js 的操作系统平台,如
-
process.version
:- 返回 Node.js 的版本号。
console.log(process.version); // 输出: 'v18.12.1' 等
-
process.versions
:- 返回一个包含 Node.js 及其依赖库版本信息的对象。
console.log(process.versions); // 输出: { node: '18.12.1', v8: '10.2.154.26', ... }
-
process.memoryUsage()
:- 返回一个对象,描述 Node.js 进程的内存使用情况,包括
rss
(常驻集大小)、heapTotal
(堆总量)、heapUsed
(已使用的堆内存)等。
console.log(process.memoryUsage()); // 输出: { rss: 12345678, heapTotal: 4567890, heapUsed: 2345678, ... }
- 返回一个对象,描述 Node.js 进程的内存使用情况,包括
常用方法
-
process.exit([code])
:- 强制终止当前 Node.js 进程。
- 可选参数
code
指定退出码,默认为0
(表示成功)。
process.exit(1); // 退出并返回状态码 1
-
process.on(event, listener)
:- 用于监听进程事件。
- 常用事件包括
'exit'
(进程退出时触发)、'uncaughtException'
(未捕获的异常时触发)、'SIGINT'
(接收到中断信号时触发)等。
process.on('exit', (code) => { console.log(`Process exited with code ${code}`); });
-
process.nextTick(callback)
:- 将回调函数放入事件循环的下一个 tick 中执行。
- 常用于确保某些操作在当前事件循环结束后立即执行。
process.nextTick(() => { console.log('This will run after the current event loop'); });
-
process.stdin
/process.stdout
/process.stderr
:- 分别表示标准输入、标准输出和标准错误流。
- 可以用于与用户交互或输出日志。
process.stdin.on('data', (data) => { console.log(`User input: ${data}`); });
-
process.kill(pid[, signal])
:- 向指定 PID 的进程发送信号。
- 默认信号为
'SIGTERM'
,用于终止进程。
process.kill(process.pid, 'SIGTERM'); // 终止当前进程
-
process.chdir(directory)
:- 改变当前工作目录。
process.chdir('/new/directory'); console.log(process.cwd()); // 输出: '/new/directory'
常用事件
-
'exit'
:- 当进程即将退出时触发。
- 此时无法阻止进程退出,只能执行同步操作。
process.on('exit', (code) => { console.log(`About to exit with code ${code}`); });
-
'uncaughtException'
:- 当未捕获的异常发生时触发。
- 通常用于记录错误日志或执行清理操作。
process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); process.exit(1); // 强制退出进程 });
-
'SIGINT'
:- 当用户按下
Ctrl+C
时触发。 - 通常用于优雅地关闭应用程序。
process.on('SIGINT', () => { console.log('Received SIGINT. Exiting...'); process.exit(0); });
- 当用户按下
总结
process
对象是 Node.js 中非常重要的全局对象,提供了丰富的属性和方法来控制和监控 Node.js 进程的行为。通过 process
,你可以访问环境变量、命令行参数、进程事件等,从而实现更复杂的应用逻辑和错误处理。理解并熟练使用 process
对象是 Node.js 开发中的关键技能之一。