- Node.js 教程
- Node.js - 首页
- Node.js - 简介
- Node.js - 环境设置
- Node.js - 第一个应用程序
- Node.js - REPL 终端
- Node.js - 命令行选项
- Node.js - 包管理器 (NPM)
- Node.js - 回调函数概念
- Node.js - 上传文件
- Node.js - 发送邮件
- Node.js - 事件
- Node.js - 事件循环
- Node.js - 事件发射器
- Node.js - 调试器
- Node.js - 全局对象
- Node.js - 控制台
- Node.js - 进程
- Node.js - 应用程序扩展
- Node.js - 打包
- Node.js - Express 框架
- Node.js - RESTful API
- Node.js - 缓冲区
- Node.js - 流
- Node.js - 文件系统
- Node.js MySQL
- Node.js - MySQL 入门
- Node.js - MySQL 创建数据库
- Node.js - MySQL 创建表
- Node.js - MySQL 插入数据
- Node.js - MySQL 从表中选择数据
- Node.js - MySQL WHERE 条件
- Node.js - MySQL ORDER BY 排序
- Node.js - MySQL 删除数据
- Node.js - MySQL 更新数据
- Node.js - MySQL 联接
- Node.js MongoDB
- Node.js - MongoDB 入门
- Node.js - MongoDB 创建数据库
- Node.js - MongoDB 创建集合
- Node.js - MongoDB 插入数据
- Node.js - MongoDB 查找数据
- Node.js - MongoDB 查询
- Node.js - MongoDB 排序
- Node.js - MongoDB 删除数据
- Node.js - MongoDB 更新数据
- Node.js - MongoDB 限制结果
- Node.js - MongoDB 联接
- Node.js 模块
- Node.js - 模块
- Node.js - 内置模块
- Node.js - 实用程序模块
- Node.js - Web 模块
- Node.js 有用资源
- Node.js - 快速指南
- Node.js - 有用资源
- Node.js - 讨论
Node.js - 进程
Node.js 中的 process 对象是一个全局对象,尽管它是在 process 模块中定义的。它是一个 EventEmitter 类的实例。process 对象提供有关当前 Node.js 进程的信息。借助与此对象关联的许多方法和属性,可以控制当前的 Node.js 进程。
进程事件
process 对象是 EventEmitter 的一个实例,并发出以下事件:
序号 | 事件 & 描述 |
---|---|
1 |
exit 当进程即将退出时发出。此时无法阻止事件循环退出,并且一旦所有 exit 监听器运行完毕,进程将退出。 |
2 |
beforeExit 当 Node.js 清空其事件循环并且没有其他内容要调度时发出此事件。通常,当没有计划工作时,Node.js 会退出,但是 'beforeExit' 的监听器可以进行异步调用,并导致 Node.js 继续运行。 |
3 |
uncaughtException 当异常冒泡回事件循环时发出。如果为该异常添加了监听器,则不会发生默认操作(即打印堆栈跟踪并退出)。 |
4 |
warning 每当 Node.js 发出进程警告时,都会发出 'warning' 事件。进程警告类似于错误,因为它描述了需要提请用户注意的异常情况。 |
5 |
信号事件 当进程收到信号(例如 SIGINT、SIGHUP 等)时发出。 |
示例
在以下代码中,process 对象的 beforeExit 事件与一个回调箭头函数相关联。类似地,exit 事件调用另一个回调函数。beforeExit 上的函数首先运行,然后是 exit 事件上的函数。
process.on('beforeExit', (code) => { console.log('A beforeExit event occured with code: ', code); }); process.on('exit', (code) => { console.log('Process exit event with code: ', code); }); console.log('This message is displayed first.');
输出
This message is displayed first. A beforeExit event occured with code: 0 Process exit event with code: 0
注意 监听器函数只能执行同步操作。Node.js 进程将在调用 'exit' 事件监听器后立即退出,导致事件循环中仍排队的任何其他工作被放弃。例如,在以下示例中,超时将永远不会发生:
示例
process.on('exit', function(code) { // Following code will never execute. setTimeout(function() { console.log("This will not run"); }, 0); console.log('About to exit with code:', code); }); console.log("Program Ended");
输出
Program Ended About to exit with code: 0
进程方法
abort()
abort() 方法立即终止当前进程,然后创建一个核心文件。
示例
以下程序每隔一秒钟向控制台打印一条消息,并在 5 秒后终止循环,因为调用了 abort() 函数。
const abortfunction = () => { console.log('Start...'); // It prints the message after every 1 second setInterval((function() { return console.log('Hello World'); }), 1000); // It calls process.abort() after 5 seconds setTimeout((function() { return process.abort(); }), 5000); }; abortfunction();
输出
Start... Hello World Hello World Hello World Hello World
终止后会输出一个较长的核心文件。
chdir()
此方法更改 Node.js 进程的当前工作目录,或者如果这样做失败(例如,如果指定的目录不存在),则抛出异常。
cwd()
process.cwd() 方法返回 Node.js 进程的当前工作目录。
示例
console.log(`Starting directory: ${process.cwd()}`); try { process.chdir('NewNodeApp'); console.log(`New directory: ${process.cwd()}`); } catch (err) { console.error(`chdir: ${err}`); }
输出
Starting directory: D:\nodejs New directory: D:\nodejs\NewNodeApp
如果找不到目录,则输出如下:
Starting directory: D:\nodejs chdir: Error: ENOENT: no such file or directory, chdir 'D:\nodejs' -> 'NewDir'
exit()
此方法以代码 exit 状态同步终止当前进程(默认为 'success' 代码 0)。Node.js 只有在所有 'exit' 事件监听器都被调用后才会终止。
示例
console.log('Code running'); process.on('exit', function(code) { return console.log(`exiting with the error code : ${code}`); }); setTimeout((function() { return process.exit(0); //after 5 sec }), 5000);
输出
Code running exiting with the error code : 0
kill()
此方法终止当前进程并向由 pid 标识的进程发送信号。
kill(pid[, signal])
参数
pid:进程 ID
signal:要发送的信号,可以是字符串或数字。默认值:'SIGTERM'。
信号名称是字符串,例如 'SIGINT' 或 'SIGHUP'。
示例
以下代码获取当前进程的 pid。它等待足够长的时间,然后正常退出。在此期间,如果您通过按 ctrl-C 发出 SIGINT 信号,则进程不会终止。
const pid = process.pid; console.log(`Process ID: ${pid}`); process.on('SIGHUP', () => console.log('Received: SIGHUP')); process.on('SIGINT', () => console.log('Received: SIGINT')); setTimeout(() => {}, 100000); // keep process alive setTimeout((function() { return process.kill(pid, 'SIGINT'); //after 5 sec }), 5000);
终端在每次按下 ctrlC 时显示进程 ID 和 Received: SIGINT。在另外 5 秒的超时后,调用 kill() 方法,该方法终止进程
Process ID: 1776 Received: SIGINT
memoryUsage()
此函数返回一个对象,该对象以字节为单位描述 Node.js 进程的内存使用情况。
示例
console.log(process.memoryUsage());
输出
{ rss: 24768512, heapTotal: 4079616, heapUsed: 3153848, external: 1097184, arrayBuffers: 10519 }
nextTick()
此函数将回调函数的执行推迟到下一个事件循环迭代。
nextTick(callback[, ...args])
此函数是 Node.js 异步 API 中事件循环的重要组成部分。在 Node.js 中,事件循环的每次迭代都称为一个 tick。要安排回调函数在事件循环的下一次迭代中被调用,我们使用 process.nextTick()。
示例
console.log('start'); process.nextTick(() => { console.log('nextTick callback executed in next iteration'); }); console.log('scheduled');
输出
start scheduled nextTick callback executed in next iteration
进程属性
process.arch
编译 Node.js 二进制文件的操作系统 CPU 架构。
可能的值为:
'arm',
'arm64',
'ia32',
'loong64',
'mips',
'mipsel',
'ppc',
'ppc64',
'riscv64',
's390',
's390x',
'x64'
示例
console.log(`This processor architecture is ${process.arch}`);
输出
This processor architecture is x64
process.argv
此属性返回一个数组,其中包含启动 Node.js 进程时传递的命令行参数。您可以将参数传递到要从命令行执行的脚本中。这些参数存储在一个数组 process.argv 中。数组中的第 0 个元素是 node 可执行文件,第一个元素是 JavaScript 文件,后面跟着传递的参数。
将以下脚本另存为 hello.js 并从命令行运行它,从命令行向其传递一个字符串参数。
const args = process.argv; console.log(args); const name = args[2]; console.log("Hello,", name);
在终端中,输入
PS D:\nodejs> node hello.js TutorialsPoint [ 'C:\\nodejs\\node.exe', 'c:\\nodejs\\a.js', 'TutorialsPoint' ] Hello, TutorialsPoint
process.env
属性返回一个包含环境变量的对象。
示例
const processEnvKeys = Object.keys(process.env); processEnvKeys.forEach((key) => { console.log(`${key}: ${process.env[key]}`); });
输出
SystemDrive: C: SystemRoot: C:\WINDOWS TEMP: C:\Users\mlath\AppData\Local\Temp TMP: C:\Users\mlath\AppData\Local\Temp USERDOMAIN: GNVBGL3 USERDOMAIN_ROAMINGPROFILE: GNVBGL3 USERNAME: mlath USERPROFILE: C:\Users\mlath windir: C:\WINDOWS ZES_ENABLE_SYSMAN: 1 TERM_PROGRAM: vscode TERM_PROGRAM_VERSION: 1.84.2 LANG: en_US.UTF-8 COLORTERM: truecolor VSCODE_INJECTION: 1 VSCODE_NONCE: b8069509-e0f5-4bbd-aac9-fc448279b154
您还可以从命令行设置环境变量。在 node 可执行文件名之前为一个或多个变量赋值。
USER_ID=101 USER_NAME=admin node app.js
在脚本内部,环境变量作为 process.env 对象的属性可用
process.env.USER_ID; // "101" process.env.USER_NAME; // "admin"
process.pid
属性返回进程的 PID。
示例
const { pid } = require('node:process'); console.log(`This process is pid ${pid}`);
输出
This process is pid 16312
process.platform
此属性返回一个字符串,用于标识操作系统。
可能的值为:
'aix'
'darwin'
'freebsd'
'linux'
'openbsd'
'sunos'
'win32'
process.version
此属性包含 Node.js 版本字符串。
示例
console.log(`Version: ${process.version}`);
输出
Version: v20.9.0