Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,它提供了用于编写服务器端代码的强大功能。其中,process
对象是 Node.js 中一个非常重要的全局对象,可以让我们与当前的 Node.js 进程进行交互。本文将详尽介绍 process
对象及其各种属性和方法,并通过多个示例来演示其使用。
process
对象?process
对象是一个全局对象,它提供了与 Node.js 进程交互的方法和属性。无论在什么地方,您都可以直接使用 process
对象,而无需通过 require
来引入。
process
对象的属性process.argv
process.argv
是一个数组,包含了启动 Node.js 进程时传递的命令行参数。第一个元素是 node
可执行文件的路径,第二个元素是 JavaScript 文件的路径,其他元素则是命令行传递的参数。
示例:
JavaScript// demo: main.js
console.log(process.argv);
运行:
Bashnode main.js arg1 arg2 arg3
输出:
process.env
process.env
是一个包含用户环境信息的对象。你可以使用它来获取环境变量,或者设置新的环境变量。
示例:
JavaScript// demo: main.js
console.log('Path:', process.env.PATH);
process.env.NEW_VAR = 'HelloWorld';
console.log('NEW_VAR:', process.env.NEW_VAR);
运行:
Bashnode main.js
输出:
process.cwd()
process.cwd()
方法返回当前工作目录,即运行 Node.js 进程时所在的文件夹。
示例:
JavaScript// demo: main.js
console.log('Current working directory:', process.cwd());
运行:
Bashnode main.js
输出:
process.exit()
process.exit()
方法以一个给定的退出码终止当前进程。默认的退出码是 0
表示成功,非零的退出码表示失败。
示例:
JavaScript// demo: main.js
console.log('This will be displayed.');
process.exit(1); // Logs the message and then exits with code 1.
console.log('This will not be displayed.');
运行:
Bashnode main.js
输出:
process.memoryUsage()
process.memoryUsage()
方法返回一个对象,描述 Node.js 进程的内存使用情况,包含 rss
, heapTotal
, heapUsed
, 和 external
等属性。
示例:
JavaScript// demo: main.js
const memoryUsage = process.memoryUsage();
console.log('Memory Usage:', memoryUsage);
运行:
Bashnode main.js
输出:
process.uptime()
process.uptime()
方法返回 Node.js 进程已运行的秒数。
示例:
JavaScript// demo: main.js
setTimeout(() => {
console.log('Process uptime:', process.uptime(), 'seconds');
}, 1500);
运行:
Bashnode main.js
输出(大约 1.5 秒后):
BashProcess uptime: 1.524598 seconds
process
对象的事件process
对象也是一个事件发射器,可以监听多个事件,如 exit
, uncaughtException
, SIGTERM
等。
exit
事件exit
事件在 Node.js 进程即将退出时触发,你可以在这里执行一些清理工作或记录日志。
示例:
JavaScript// demo: main.js
process.on('exit', (code) => {
console.log(`About to exit with code: ${code}`);
});
console.log('This message will be logged before the process exits.');
process.exit(0);
运行:
Bashnode main.js
输出:
BashThis message will be logged before the process exits.
About to exit with code: 0
uncaughtException
事件uncaughtException
事件在一个未捕获的错误抛出时触发,这通常用于记录或清理资源,但并不推荐在产品代码中使用,因为它可能在异常处理后无法保证系统继续稳定运行。
示例:
JavaScript// demo: main.js
process.on('uncaughtException', (err) => {
console.error('There was an uncaught error:', err);
});
nonExistentFunction(); // This will throw an error
运行:
Bashnode main.js
输出:
BashThere was an uncaught error: ReferenceError: nonExistentFunction is not defined at Object.<anonymous> (D:\myproject\11Test\nodejs-01\main.js:5:3) at Module._compile (node:internal/modules/cjs/loader:1376:14) at Module._extensions..js (node:internal/modules/cjs/loader:1435:10) at Module.load (node:internal/modules/cjs/loader:1207:32) at Module._load (node:internal/modules/cjs/loader:1023:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12) at node:internal/main/run_main_module:28:49
SIGINT
事件SIGINT
事件在接收到 Ctrl+C
时触发,常用于执行程序终止前的清理工作。
示例:
JavaScript// demo: main.js
process.on('SIGINT', () => {
console.log('Received SIGINT. Press Ctrl+D to exit.');
process.exit();
});
console.log('Press Ctrl+C to trigger the SIGINT event.');
setInterval(() => {}, 1000); // Keeps the process alive
运行:
Bashnode main.js
当按 Ctrl+C
时,输出:
BashPress Ctrl+C to trigger the SIGINT event.
Received SIGINT. Press Ctrl+D to exit.
process
对象是 Node.js 中与操作系统交互的一个关键接口。通过了解和利用 process
对象的各种属性和方法,你可以更高效地编写与系统深入交互的 Node.js 程序。同时,掌握事件监听也能帮助你捕获并处理进程生命周期中的各种关键事件。希望这篇文章帮助你全面了解 process
对象的强大功能。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!