Node.js process 对象的核心用法(argv/env/exit/信号)
请说明 Node.js 中 process 全局对象的常用属性和方法,包括 process.argv、process.env、process.exit、process.cwd、以及信号处理(SIGINT/SIGTERM)。
回答
屠龙少年
1. process.argv:命令行参数数组
node app.js --name=hello --verbose
// ['/usr/bin/node', '/path/to/app.js', '--name=hello', '--verbose']
const args = process.argv.slice(2);
// 推荐使用 yargs/commander 解析
2. process.env:环境变量对象
// 读取
const dbUrl = process.env.DATABASE_URL || 'default';
// 设置(仅在当前进程生效)
process.env.NODE_ENV = 'production';
// 列出所有
console.log(process.env);
3. process.exit([code]):退出进程
process.exit(0); // 成功
process.exit(1); // 失败(非0表示异常)
process.exitCode = 1; // 设置退出码,等待事件循环自然退出
- 推荐使用
process.exitCode赋值而非直接process.exit()(避免强制退出)
4. process.cwd() / process.chdir():当前工作目录
console.log(process.cwd()); // '/home/user/project'
process.chdir('/tmp');
console.log(process.cwd()); // '/tmp'
5. 信号处理:
// Ctrl+C → SIGINT
process.on('SIGINT', () => {
console.log('收到中断信号');
process.exit(0);
});
// 优雅关闭
process.on('SIGTERM', () => {
server.close(() => {
console.log('服务器已关闭');
process.exit(0);
});
});
// 未捕获异常处理(兜底)
process.on('uncaughtException', (err) => {
console.error('未捕获异常:', err);
process.exit(1);
});
// 未处理的 Promise reject
process.on('unhandledRejection', (reason) => {
console.error('未处理的 Promise 拒绝:', reason);
});
其他:process.version(Node 版本)、process.platform('win32'/'linux'/'darwin')、process.memoryUsage()、process.uptime()、process.hrtime.bigint()。