理解 Node.js 中的 process`对象与常用操作

理解 Node.js 中的 process 对象与常用操作

在 Node.js 中,process 是一个全局对象,提供了与当前 Node.js 进程相关的信息和操作。无论是获取进程信息、处理信号、访问环境变量,还是控制进程行为,process 都是不可或缺的工具。

看到process不犯怵了


1. 获取进程信息

process 提供了许多属性和方法来获取当前进程的信息。

  • process.pid:获取当前进程的 PID(进程 ID)。

  • process.ppid:获取当前进程的父进程的 PID。

  • process.platform :获取当前操作系统平台,例如 'win32''linux''darwin'(macOS)等。

  • process.arch :获取当前 CPU 架构,例如 'x64''arm' 等。

  • process.uptime() :获取当前进程已经运行的秒数。

    console.log(process.pid); // 输出当前进程的 PID
    console.log(process.platform); // 输出操作系统平台
    console.log(process.uptime()); // 输出进程运行的秒数


2. 访问环境变量

process.env 是一个对象,包含当前进程的环境变量。通过它,你可以访问和设置环境变量。

  • 访问环境变量

    复制代码
    console.log(process.env.NODE_ENV); // 输出 'development' 或 'production'
  • 设置环境变量

    复制代码
    process.env.NODE_ENV = 'production';

3. 控制进程行为

process 提供了方法来控制进程的行为。

  • process.exit([code]) :强制退出当前进程。可以指定退出码,0 表示正常退出,非零值表示异常退出。

    复制代码
    process.exit(1); // 退出并返回状态码 1
  • process.kill(pid[, signal]) :向指定 PID 的进程发送信号。默认信号是 SIGTERM

    复制代码
    process.kill(process.pid, 'SIGTERM'); // 终止当前进程

4. 处理信号

process 可以监听操作系统发送的信号,例如 SIGINTSIGTERM 等。

  • SIGINT :用户按下 Ctrl+C 时触发。

    复制代码
    process.on('SIGINT', () => {
      console.log('Received SIGINT. Exiting...');
      process.exit(0);
    });
  • SIGTERM:系统发送的终止信号,通常用于请求进程优雅退出。

    复制代码
    process.on('SIGTERM', () => {
      console.log('Received SIGTERM. Exiting...');
      process.exit(0);
    });

5. 标准输入输出

process 提供了标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的流。

  • process.stdout:用于向终端输出信息。

    复制代码
    process.stdout.write('Hello, World!\n');
  • process.stdin:用于从终端读取输入。

    复制代码
    process.stdin.on('data', (data) => {
      console.log(`You typed: ${data.toString().trim()}`);
    });
  • process.stderr:用于输出错误信息。

    复制代码
    process.stderr.write('An error occurred!\n');

6. 事件处理

process 是一个 EventEmitter,可以监听和处理各种事件。

  • exit:当进程即将退出时触发。

    复制代码
    process.on('exit', (code) => {
      console.log(`Process is exiting with code ${code}`);
    });
  • uncaughtException:当未捕获的异常发生时触发。

    复制代码
    process.on('uncaughtException', (err) => {
      console.error('Uncaught Exception:', err);
      process.exit(1); // 强制退出
    });
  • unhandledRejection:当未处理的 Promise 拒绝时触发。

    复制代码
    process.on('unhandledRejection', (reason, promise) => {
      console.error('Unhandled Rejection at:', promise, 'Reason:', reason);
    });

7. 命令行参数

process.argv 是一个数组,包含启动 Node.js 进程时传递的命令行参数。

  • 访问命令行参数

    复制代码
    console.log(process.argv); // 输出 ['/path/to/node', '/path/to/app.js', 'arg1', 'arg2']
  • 获取用户传递的参数

    复制代码
    const args = process.argv.slice(2);
    console.log(args); // 输出 ['arg1', 'arg2']

8. 工作目录

process.cwd() 返回当前进程的工作目录。你可以使用 process.chdir(path) 改变工作目录。

复制代码
console.log(process.cwd()); // 输出当前工作目录
process.chdir('/new/directory'); // 改变工作目录

9. 内存使用

process.memoryUsage() 返回当前进程的内存使用情况。

复制代码
const memoryUsage = process.memoryUsage();
console.log(memoryUsage);

输出示例:

复制代码
{
  rss: 12345678,      // 常驻内存大小
  heapTotal: 4567890, // 已分配的堆内存
  heapUsed: 1234567,  // 已使用的堆内存
  external: 789012,   // C++ 对象占用的内存
  arrayBuffers: 12345 // ArrayBuffer 和 SharedArrayBuffer 占用的内存
}

10. 调试信息

process 提供了调试相关的功能。

  • process.debugPort:获取调试端口。

    复制代码
    console.log(process.debugPort);
  • process._debugProcess(pid) :调试指定 PID 的进程。

    复制代码
    process._debugProcess(process.pid);

总结

妈妈再也不用担心我看不懂了

相关推荐
We་ct几秒前
LeetCode 48. 旋转图像:原地旋转最优解法
前端·算法·leetcode·typescript
妙团团1 分钟前
React学习之自定义tab组合组件
javascript·学习·react.js
2601_949809597 分钟前
flutter_for_openharmony家庭相册app实战+隐私设置实现
android·javascript·flutter
2601_949593659 分钟前
React Native 鸿蒙跨平台开发:LinearGradient 渐变动画效果
javascript·react native·react.js
roamingcode9 分钟前
我是如何 Vibe Coding,将 AI CLI 工具从 Node.js 迁移到 Rust 并成功发布的
人工智能·rust·node.js·github·claude·github copilot
黄筱筱筱筱筱筱筱10 分钟前
7.适合新手小白学习Python的异常处理(Exception)
java·前端·数据库·python
qq_1777673711 分钟前
React Native鸿蒙跨平台音乐播放器涉及实时进度更新、播放控制、列表交互、状态管理等核心技术点
javascript·react native·react.js·ecmascript·交互·harmonyos
2501_9209317015 分钟前
React Native鸿蒙跨平台实现了简单的商品图片轮播功能,为用户提供了直观的商品图片浏览体验,帮助用户全面了解商品外观
javascript·react native·react.js·ecmascript·harmonyos
Yeats_Liao17 分钟前
微调决策树:何时使用Prompt Engineering,何时选择Fine-tuning?
前端·人工智能·深度学习·算法·决策树·机器学习·prompt
晚霞的不甘18 分钟前
Flutter for OpenHarmony 实现 iOS 风格科学计算器:从 UI 到表达式求值的完整解析
前端·flutter·ui·ios·前端框架·交互