一、特点
- 全局可访问性
process 是 Node.js 的全局对象,无需通过 require 导入即可直接使用。 - 继承自 EventEmitter
它是一个 EventEmitter 实例,可以监听和处理系统级事件(如进程退出、未捕获异常等)。 - 进程信息与控制
提供进程的详细信息(如 PID、版本、工作目录等)和操作方法(如切换目录、终止进程)。 - 环境交互能力
支持访问和修改环境变量(process.env)、处理命令行参数(process.argv),以及操作标准输入/输出流(stdin、stdout、stderr)。
二、作用
- 进程管理
- 获取进程 ID(process.pid)、操作系统平台(process.platform)等信息。
- 终止进程(process.exit())或切换工作目录(process.chdir())。
- 事件处理
- 监听 exit 事件执行进程退出前的清理操作。
- 捕获未处理的异常(uncaughtException 事件)防止程序崩溃。
- 输入/输出流操作
- 通过 process.stdin 读取输入,process.stdout 写入控制台输出。
- 实现管道操作,例如 process.stdin.pipe(process.stdout) 实时回显输入内容。
- 性能监控
- 使用 process.memoryUsage() 获取内存使用情况。
- 通过 process.uptime() 监测进程运行时间。
- 进程间通信(IPC)
- 在父子进程间通过 process.send() 和 message 事件传递消息。
三、常见参数和方法
-
process.memoryUsage() 返回一个对象,包含堆使用情况、外部内存等信息。
- rss 常驻内存
- heapTotal 申请总内存
- heapUsed 使用的内存
- external 扩展使用的内存 底层的c或c++模块占用
- arrayBuffers 独立空间
-
process.cpuUsage() 返回一个对象,包含用户态和内核态的CPU使用时间, 可用于分析用户代码运行和系统调度分别花费的事件。
- user
- system
-
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 系统平台
-
运行状态 启动参数
- process.argv 参数数组 前两个是默认参数:node位置和文件位置 后续为自定义参数
- process.pid 进程id
- process.uptime() 运行时间
四、示例
- 获取命令行参数
console.log(process.argv); // 输出数组,包含执行参数
- 环境变量操作
const apiKey = process.env.API_KEY; // 读取环境变量
process.env.NODE_ENV = 'production'; // 修改环境变量
- 工作目录管理
console.log(process.cwd()); // 当前工作目录
process.chdir('/new/dir'); // 切换目录
- 事件监听
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')
- 进程控制
process.exit(1); // 终止进程并返回状态码
process.kill(process.pid, 'SIGTERM'); // 发送终止信号
- 异步任务调度
process.nextTick(() => {
console.log('在下个事件循环执行'); // 优先于其他异步操作
});
- 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 是全局对象,但应谨慎修改其属性(如 process.title)。
- 异常处理:未捕获的异常可能导致进程不稳定,建议结合 try/catch 和事件监听确保健壮性。
- 资源释放:在 exit 事件中仅支持同步操作,异步任务需提前完成。
通过合理利用 process 对象,开发者可以更高效地控制 Node.js 进程的行为,实现复杂的系统级操作。