Skip to content
Go back

Nodejs之process

Updated:  at  11:34 PM

文章目录

一、特点

  1. 全局可访问性
    process 是 Node.js 的全局对象,无需通过 require 导入即可直接使用。
  2. 继承自 EventEmitter
    它是一个 EventEmitter 实例,可以监听和处理系统级事件(如进程退出、未捕获异常等)。
  3. 进程信息与控制
    提供进程的详细信息(如 PID、版本、工作目录等)和操作方法(如切换目录、终止进程)。
  4. 环境交互能力
    支持访问和修改环境变量(process.env)、处理命令行参数(process.argv),以及操作标准输入/输出流(stdin、stdout、stderr)。

二、作用

  1. 进程管理
    • 获取进程 ID(process.pid)、操作系统平台(process.platform)等信息。
    • 终止进程(process.exit())或切换工作目录(process.chdir())。
  2. 事件处理
    • 监听 exit 事件执行进程退出前的清理操作。
    • 捕获未处理的异常(uncaughtException 事件)防止程序崩溃。
  3. 输入/输出流操作
    • 通过 process.stdin 读取输入,process.stdout 写入控制台输出。
    • 实现管道操作,例如 process.stdin.pipe(process.stdout) 实时回显输入内容。
  4. 性能监控
    • 使用 process.memoryUsage() 获取内存使用情况。
    • 通过 process.uptime() 监测进程运行时间。
  5. 进程间通信(IPC)
    • 在父子进程间通过 process.send() 和 message 事件传递消息。

三、常见参数和方法

  1. process.memoryUsage() 返回一个对象,包含堆使用情况、外部内存等信息。

    • rss 常驻内存
    • heapTotal 申请总内存
    • heapUsed 使用的内存
    • external 扩展使用的内存 底层的c或c++模块占用
    • arrayBuffers 独立空间
  2. process.cpuUsage() 返回一个对象,包含用户态和内核态的CPU使用时间, 可用于分析用户代码运行和系统调度分别花费的事件。

    • user
    • system
  3. process属性,可用于查看系统信息和环境变量

    • process.versions node环境
    • process.arch cpu架构
    • process.env 用户环境
    • process.env. NODE_ENV 用户环境
    • process.env. PATH 系统环境
    • process.env. USERPROFILE win系统环境
    • process.env. HOME mac系统环境
    • process.platform 系统平台
  4. 运行状态 启动参数

    • process.argv 参数数组 前两个是默认参数:node位置和文件位置 后续为自定义参数
    • process.pid 进程id
    • process.uptime() 运行时间

四、示例

  1. 获取命令行参数
console.log(process.argv); // 输出数组,包含执行参数
  1. 环境变量操作
const apiKey = process.env.API_KEY; // 读取环境变量
process.env.NODE_ENV = 'production'; // 修改环境变量
  1. 工作目录管理
console.log(process.cwd()); // 当前工作目录
process.chdir('/new/dir'); // 切换目录
  1. 事件监听

exit事件不要做异步操作

process.on('exit', (code) => {
    console.log(`进程退出,代码:${code}`); // 退出前执行
});

process.on('uncaughtException', (err) => {
    console.error('未捕获异常:', err); // 防止崩溃
});

process.on('beforeExit', (code) => {
    console.log('进程退出前,代码: ' + code)
    setTimeout(() => {
        console.log('进程退出前,代码: ' + code)
        process.exit();
    }, 1000)
})

console.log('done')
  1. 进程控制
process.exit(1); // 终止进程并返回状态码
process.kill(process.pid, 'SIGTERM'); // 发送终止信号
  1. 异步任务调度
process.nextTick(() => {
    console.log('在下个事件循环执行'); // 优先于其他异步操作
});
  1. stdin stdout
console.log = function(data) {
    process.stdout.write('--- ' + data + '\n');
}

import fs from 'node:fs';

fs.createReadStream('test.txt').pipe(process.stdout)

process.stdin.setEncoding('utf-8');
process.stdin.on('readable', () => {
    let chunk = process.stdin.read();
    process.stdout.write('data ' + chunk)
})

五、注意事项

通过合理利用 process 对象,开发者可以更高效地控制 Node.js 进程的行为,实现复杂的系统级操作。



Previous Post
Cocos Creator学习之旅
Next Post
C++之学习之旅