CodeWalk

Node.js process 对象的核心用法(argv/env/exit/信号)

作者:屠龙少年 · 2026-05-30 12:55

请说明 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()