process对象是一个全局对象,提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。
1.进程事件
process
对象是
EventEmitter
类的实例,因此可以使用事件的方式来处理和监听
process
对象的各种事件。以下是一些常用的
process
对象事件:
- ‘exit’:当进程即将退出时触发。可以用于执行一些清理操作。
此时无法阻止事件循环退出,并且一旦所有 exit 事件的监听器都完成运行,Node.is 进程将终止。这里给出简单的示例代码。
示例代码:
process.on('exit',(code)=>{
console.log(`Process exited with code ${code}`);});
- beforeExit 当Node.s 清空其事件循环并且没有其他工作要调度时,会触发此事件。 - 通常,Node.js进程将在没有调度工作时退出,但是在 beforeExit 事件上注册的监听器可以进行异步调用,从而导致Node.is 进程继续,beforeExit 事件会反复执行 。> 因为beforeExit 事件会在 Node.js 清空事件循环时触发,但在退出之前beforeExit 事件的处理函数中包含了一个异步操作 setTimeout,这会导致事件循环中有一个未完成的异步操作。事件循环仍然会继续,直到所有异步操作完成或被取消。
beforeExit 事件的监听器回调函数会接收到 process.exitCode(退出码)作为唯一参数。可以通过设置 process.exitCode 的值来指定进程退出时的退出码。
process.on('beforeExit',(exitCode)=>{
console.log('beforeExit event触发');
console.log(`Exit code: ${exitCode}`);// 执行一些异步操作会导致Node.is 进程继续,beforeExit 事件会反复执行 。// setTimeout(() => {// console.log('beforeExit 异步操作');// }, 1000);});// 模拟异步操作setTimeout(()=>{
console.log('异步操作');},1000);// 模拟同步操作
console.log('同步操作');// 设置退出码
process.exitCode =1;
在上面的示例中,我们监听了 beforeExit 事件,并在事件处理函数中打印一些信息,包括退出码。在事件循环中,先执行同步操作,然后执行异步操作。当事件循环中的所有任务执行完毕后,beforeExit 事件会被触发,我们可以在事件处理函数中执行一些异步操作。
- ‘uncaughtException’:当未捕获的异常发生时触发。可以用于捕获并处理未处理的异常。 示例代码:
process.on('uncaughtException',(err)=>{ console.error('Uncaught Exception:', err);// 执行一些处理逻辑 process.exit(1);// 强制退出进程});
- ‘SIGINT’:当用户按下Ctrl+C键时触发。可以用于捕获并处理用户的中断信号。 示例代码:
process.on('SIGINT',()=>{ console.log('Received SIGINT signal');// 执行一些处理逻辑 process.exit(0);// 正常退出进程});
- ‘SIGTERM’:当进程收到终止信号时触发。可以用于捕获并处理终止信号。 示例代码:
process.on('SIGTERM',()=>{ console.log('Received SIGTERM signal');// 执行一些处理逻辑 process.exit(0);// 正常退出进程});
这些是一些常用的
process
对象事件,可以根据具体的需求来监听和处理相应的事件。
退出状态码
状态码名称说明1Uncaught Fatal Exception(未捕获异常)存在未捕获异常,并且没有被域或 uncaughtException 事件处理函数处理2Unused(保留)Bash Shell 为防内部滥用而被保留3Internal JavaScript ParseError(内部JavaScript 分析错误)Node.js 内部的JavaScript 源代码在引导进程中导致了一个语法分析错误4Internal JavaScript Evaluation Failure(内部JavaScript 评估失败)Node.js 内部的JavaScript 代码在引导进程中导致了一个评估失败5Fatal Error(致命错误)V8 引擎遇到了一个致命错误,例如内存分配失败6Non-function Internal Exception Handler(非函数内部异常处理程序)试图使用非函数对象作为异常处理程序7Internal Exception Handler Run-Time Failure(内部异常处理程序运行时失败)异常处理程序在运行时遇到了一个错误8Unused(保留)保留状态码9Invalid Argument(无效参数)传递给Node.js的参数无效10Internal JavaScript Run-Time Failure(内部JavaScript运行时失败)Node.js 内部的JavaScript 代码在运行时遇到了一个错误12Invalid Debug Argument(无效调试参数)传递给Node.js的调试参数无效128Signal Exits(信号退出)如果Nodejs 接收到致命的错误信号,如 SIGKILL 或 SIGHUP,那么它的退出代码将是 128 加上信号码的值。这是 POSIX的标准做法,例如,信号SIGABRT的值为6,预期的退出码将为128+6 或134
process 对象属性
process 对象是 Node.js 的全局对象之一,提供了许多属性用于控制系统的交互。以下是常用的 process 对象属性:
- process.argv:一个包含命令行参数的数组。第一个元素是 Node.js 的可执行文件路径,第二个元素是当前执行的 JavaScript 文件路径,后续元素是传递给脚本的命令行参数。
- process.env:一个包含用户环境信息的对象。可以通过该对象访问环境变量,如 process.env.HOME。
- process.pid:当前进程的进程 ID。
- process.cwd():返回当前工作目录的路径。
- process.platform:返回当前操作系统的平台标识符,如 ‘darwin’ 表示 macOS,‘win32’ 表示 Windows。
- process.exitCode:进程退出时的退出码。默认为 0,表示成功退出。
- process.version:Node.js 的版本号。
- process.versions:一个包含 Node.js 及其依赖模块版本信息的对象。
- process.arch:返回当前 CPU 架构,如 ‘x64’。
- process.title:获取或设置进程的标题。默认node
- process.stdin、process.stdout、process.stderr:标准输入、标准输出和标准错误流。
//argv-test.js
process.stdout.write("Hello World!"+"\n");// 将字符串输出到终端//通过参数读取
process.argv.forEach(function(val, index, array){
console.log(index +': '+ val);});
console.log(process.execPath);// 获取执行路径
console.log(process.platform);// 获取平台信息
执行命令:
node ./argv-test.js -a -b c
,输出以下结果
Hello World!
argv-test.js
2: -a3: -b4: c
D:\wushaopeng\nvm\nodejs\node.exe
win32
process 对象的方法
process 对象提供了多种方法用于控制与系统的交互。以下是常用的 process 对象方法:
- process.exit([code]):退出当前进程。可选地指定退出码,默认为 0。
- process.on(event, listener):注册事件监听器。可以监听多种事件,如 ‘exit’、‘uncaughtException’、‘SIGINT’ 等。
- process.cwd():返回当前工作目录的路径。
- process.chdir(directory):改变当前工作目录为指定的目录。
- process.kill(pid[, signal]):向指定的进程发送信号。可以用于终止或控制其他进程。
- process.nextTick(callback):将回调函数推迟到下一个事件循环迭代中执行。常用于异步操作的回调函数。
- process.stdout.write(data):向标准输出流写入数据。
- process.stderr.write(data):向标准错误流写入数据。
- process.stdin.on(event, listener):监听标准输入流的事件,如 ‘data’、‘end’ 等。
- process.env:一个包含用户环境信息的对象。可以通过该对象访问环境变量。
- process.memoryUsage( ): 返回一个用于描述Node 进程内存使用情况的对象,该对象每个属 性值的单位为字节。
console.log('当前目录: '+ process.cwd());
console.log('当前版本: '+ process.version);const memoryUsage = process.memoryUsage();const convertedMemoryUsage ={rss:(memoryUsage.rss /(1024*1024)).toFixed(2)+'MB',heapTotal:(memoryUsage.heapTotal /(1024*1024)).toFixed(2)+'MB',heapUsed:(memoryUsage.heapUsed /(1024*1024)).toFixed(2)+'MB',external:(memoryUsage.external /(1024*1024)).toFixed(2)+'MB',};
console.log(convertedMemoryUsage);;
版权归原作者 wusp1994 所有, 如有侵权,请联系我们删除。