Node.js
中的 process
对象是一个全局对象,代表 Node.js 进程的当前状态和环境信息。它提供了一系列属性和方法,允许开发者与操作系统进行交互、获取环境信息、管理进程生命周期、处理信号等。
以下是对 process
对象所有属性和方法的详细介绍,以及它们的具体使用场景。
1. 概述
process
对象是一个全局对象,因此无需 require
任何模块即可使用。它提供了有关当前 Node.js 进程的关键信息和控制方法。使用 process
,你可以管理进程的生命周期、处理系统信号、与父子进程通信以及监控性能。
2. 常用属性
2.1 process.argv
process.argv
是一个数组,包含启动 Node.js 进程时传递的命令行参数。第一个元素是 node
的可执行文件路径,第二个元素是正在执行的脚本文件路径,后续元素是命令行参数。
示例:
console.log(process.argv);
// 输出: ['/usr/local/bin/node', '/path/to/script.js', 'arg1', 'arg2']
2.2 process.env
process.env
是一个包含用户环境信息的对象,例如系统环境变量。可以通过此对象读取或设置环境变量。
示例:
console.log(process.env.PATH);
process.env.MY_VARIABLE = 'hello world';
console.log(process.env.MY_VARIABLE);
2.3 process.cwd()
process.cwd()
返回 Node.js 进程的当前工作目录。
示例:
console.log('当前工作目录:', process.cwd());
2.4 process.version
process.version
返回当前 Node.js 版本的字符串。
示例:
console.log('Node.js 版本:', process.version);
2.5 process.versions
process.versions
返回一个对象,包含 Node.js 和其依赖的版本信息(如 V8 引擎、OpenSSL 等)。
示例:
console.log('版本信息:', process.versions);
2.6 process.pid
process.pid
返回当前进程的进程 ID。
示例:
console.log('当前进程 ID:', process.pid);
2.7 process.ppid
process.ppid
返回当前进程的父进程 ID。
示例:
console.log('父进程 ID:', process.ppid);
2.8 process.title
process.title
用于获取或设置当前进程的标题,该标题会显示在操作系统的进程管理器中。
示例:
console.log('当前进程标题:', process.title);
process.title = 'My Node App';
console.log('新进程标题:', process.title);
2.9 process.platform
process.platform
返回当前操作系统平台的名称,如 'darwin'
、'win32'
、'linux'
等。
示例:
console.log('操作系统平台:', process.platform);
2.10 process.arch
process.arch
返回当前 CPU 的架构,如 'x64'
、'arm'
等。
示例:
console.log('CPU 架构:', process.arch);
2.11 process.uptime()
process.uptime()
返回当前进程已运行的秒数。
示例:
console.log(`进程已运行时间: ${process.uptime()} 秒`);
2.12 process.memoryUsage()
process.memoryUsage()
返回一个对象,显示 Node.js 进程的内存使用情况。
示例:
console.log('内存使用情况:', process.memoryUsage());
2.13 process.hrtime()
process.hrtime()
返回高分辨率的时间差,以 [seconds, nanoseconds]
形式表示,可以用于精确的性能测量。
示例:
const start = process.hrtime();
// 执行一些操作
const end = process.hrtime(start);
console.log(`操作耗时: ${end[0]} 秒和 ${end[1]} 纳秒`);
2.14 process.hrtime.bigint()
process.hrtime.bigint()
返回高分辨率的当前时间,以 BigInt
表示,单位为纳秒。
示例:
const start = process.hrtime.bigint();
// 执行一些操作
const end = process.hrtime.bigint();
console.log(`操作耗时: ${end - start} 纳秒`);
2.15 process.exitCode
process.exitCode
设置或获取进程退出的返回码,通常用于在进程退出前指定退出状态码。
示例:
process.exitCode = 1; // 表示非正常退出
3. 常用方法
3.1 process.exit()
process.exit()
立即退出 Node.js 进程,并返回指定的退出码(默认是 0
表示成功退出)。
语法:
process.exit([code]);
示例:
if (someError) {
console.error('发生错误,退出程序');
process.exit(1); // 非零表示错误退出
}
3.2 process.abort()
process.abort()
会使 Node.js 进程异常终止并生成一个核心转储文件(如果操作系统支持)。
示例:
process.abort();
3.3 process.kill()
process.kill()
用于向指定的进程发送信号,默认是发送 SIGTERM
信号以终止进程。
语法:
process.kill(pid, [signal]);
示例:
process.kill(process.pid, 'SIGTERM'); // 终止当前进程
3.4 process.chdir()
process.chdir()
用于改变当前工作目录。
示例:
console.log('当前工作目录:', process.cwd());
process.chdir('/tmp');
console.log('新的工作目录:', process.cwd());
3.5 process.on()
process.on()
用于监听 Node.js 进程的事件,例如 exit
、uncaughtException
等。
示例:
process.on('exit', (code) => {
console.log(`进程退出,退出码: ${code}`);
});
3.6 process.off()
process.off()
用于移除特定事件的监听器。
示例:
const listener = (code) => {
console.log(`进程退出,退出码: ${code}`);
};
process
.on('exit', listener);
process.off('exit', listener); // 移除监听器
4. 信号事件
Node.js 支持操作系统的信号事件,例如 SIGINT
、SIGTERM
、SIGHUP
等。这些信号可以通过 process.on()
来监听并做相应处理。
示例:
process.on('SIGINT', () => {
console.log('接收到 SIGINT 信号,进程终止');
process.exit();
});
常见信号包括:
SIGINT
: 终止进程(通常由Ctrl+C
触发)。SIGTERM
: 请求正常终止进程。SIGHUP
: 终止进程后重启。
5. 标准输入输出流
5.1 process.stdin
process.stdin
是可读流,表示标准输入(例如用户输入)。通常用于从命令行读取输入。
示例:
process.stdin.on('data', (data) => {
console.log(`输入的数据: ${data}`);
});
5.2 process.stdout
process.stdout
是可写流,表示标准输出。你可以通过它输出数据到命令行。
示例:
process.stdout.write('Hello, World!\n');
5.3 process.stderr
process.stderr
是可写流,表示标准错误输出,通常用于输出错误信息。
示例:
process.stderr.write('发生错误!\n');
6. 使用示例
以下是一个综合示例,演示了如何使用 process
对象的属性和方法:
console.log('进程 ID:', process.pid);
console.log('Node.js 版本:', process.version);
console.log('当前工作目录:', process.cwd());
process.on('exit', (code) => {
console.log(`进程退出,退出码: ${code}`);
});
process.on('SIGINT', () => {
console.log('接收到 SIGINT 信号,进程即将退出...');
process.exit();
});
setTimeout(() => {
console.log('模拟长时间运行任务...');
}, 5000);
process.stdin.resume();
7. 总结
process
对象为 Node.js 提供了强大的与系统交互的能力。通过它,开发者可以获取进程相关信息、控制进程的生命周期、处理系统信号等。掌握 process
的各种属性和方法对于编写高效、健壮的 Node.js 应用至关重要。