Node.js 中的流程对象是一个全局对象,尽管它是在流程模块中定义的。它是 EventEmitter 类的一个实例。进程对象提供有关当前Node.js进程的信息。借助与此对象关联的许多方法和属性,可以控制当前的Node.js过程。
流程事件
进程对象是 EventEmitter 的一个实例,并发出以下事件 -
事件 | 描述 |
---|---|
exit |
在进程即将退出时发出。此时无法阻止事件循环退出,一旦所有退出侦听器都完成运行,进程将退出。 |
beforeExit |
当节点清空其事件循环并且没有其他可调度的内容时,将发出此事件。通常,当没有计划工作时,节点会退出,但“beforeExit”的侦听器可以进行异步调用,并导致节点继续。 |
uncaughtException |
当异常一直冒泡回到事件循环时发出。如果为此异常添加了侦听器,则不会发生默认操作(即打印堆栈跟踪并退出)。 |
warning |
每当Node.js发出进程警告时,都会发出“warning”事件。进程警告类似于错误,因为它描述了引起用户注意的异常情况。 |
Signal Events |
当进程接收到SIGINT、SIGHUP等信号时发出。 |
例
在下面的代码中,进程对象的 beforeExit 事件与回调箭头函数相关联。同样,exit 事件调用另一个回调函数。beforeExit 上的函数首先运行,然后是 exit 事件上的函数。
输出
A beforeExit event occured with code: 0
Process exit event with code: 0
请注意,侦听器函数只能执行同步操作。Node.js进程将在调用“exit”事件侦听器后立即退出,从而导致放弃仍在事件循环中排队的任何其他工作。例如,在以下示例中,超时永远不会发生 -
例
输出
About to exit with code: 0
处理方法
abort()
abort() 方法立即终止当前进程,然后创建一个核心文件。
例以下程序每 1 秒向控制台打印一条消息,并在 5 秒后在调用 abort() 函数时终止循环。
输出
Hello World
Hello World
Hello World
Hello World
终止之后是长核心文件输出。
chdir()
此方法将更改Node.js进程的当前工作目录,或者在执行此操作失败时引发异常(例如,如果指定的目录不存在)。
cwd()
process.cwd() 方法返回 Node.js进程的当前工作目录。
例
输出
New directory: D:\nodejs\NewNodeApp
如果找不到目录,输出将如下所示 -
exit()
此方法与代码的退出状态同步终止当前进程 (默认为“成功” 代码 0) 。在调用所有“exit”事件侦听器之前,Node.js不会终止。
例
输出
exiting with the error code : 0
kill()
此方法终止当前进程,并向 pid 标识的进程发送信号。
Parameters
pid : 进程 ID
signal :要发送的信号,可以是字符串或数字。默认值:'SIGTERM'。
信号名称是字符串,例如“SIGINT”或“SIGHUP”。
例以下代码获取当前进程的 pid。它会等待足够长的时间,然后才会正常退出。在此期间,如果通过按 ctrl-C 发出 SIGINT 信号,则该过程不会终止。
每当按下 ctrlC 时,终端都会显示进程 ID 和 Received: SIGINT。再次超时 5 秒后,将调用 kill() 方法,从而终止进程
Received: SIGINT
memoryUsage()
此函数返回一个对象,该对象描述以字节为单位的 Node.js 进程的内存使用情况。
例
输出
rss: 24768512,
heapTotal: 4079616,
heapUsed: 3153848,
external: 1097184,
arrayBuffers: 10519
}
nextTick()
此函数将回调函数的执行推迟到下一次事件循环迭代。
该函数是 Node.js 异步 API 中事件循环的重要组成部分。在 Node.js 中,事件循环的每次迭代都称为滴答。为了安排在事件循环的下一次迭代中调用的回调函数,我们使用 process.nextTick()。
例
输出
scheduled
nextTick callback executed in next iteration
工艺特性
process.arch
为其编译 Node.js二进制文件的操作系统 CPU 体系结构。
可能的值为:
- 'arm',
- 'arm64',
- 'ia32',
- 'loong64',
- 'mips',
- 'mipsel',
- 'ppc',
- 'ppc64',
- 'riscv64',
- 's390',
- 's390x',
- 'x64'
例
输出
process.argv
此属性返回一个数组,其中包含启动Node.js进程时传递的命令行参数。您可以将参数传递给要从命令行执行的脚本。参数存储在数组 process.argv 中。数组中的第 0 个元素是节点可执行文件,第一个元素是 JavaScript 文件,然后是传递的参数。
将以下脚本另存为 你好.js 并从命令行运行它,从命令行向它传递一个字符串参数。
在终端中,输入
process.env
property 返回一个包含环境变量的对象。
例
输出
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
您还可以从命令行设置环境变量。将值分配给节点可执行文件名称之前的一个或多个变量。
在脚本内部,环境变量可用作 process.env 对象的属性
process.pid
属性返回进程的 PID。
例
输出
流程平台
此属性返回一个字符串,用于标识操作系统。
可能的值为 -
- 'aix'
- 'darwin'
- 'freebsd'
- 'linux'
- 'openbsd'
- 'sunos'
- 'win32'
process.version
此属性包含Node.js版本字符串。
例
输出