理解 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
可以监听操作系统发送的信号,例如 SIGINT
、SIGTERM
等。
-
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);
总结
妈妈再也不用担心我看不懂了