process是一个全局变量,是全局对象的一个??属性。它的作用是描述当前Node.js进程状态的对象,提供与操作系统的简单接口。通常,在编写本地命令程序时,经常会用到进程。下面说说进程对象的一些常用的成员方法。exit:当进程准备好退出时触发退出代码为:'+code)})console.log('Programexecutionends')exitstatuscode1UncaughtFatalException有未捕获的异常,尚未被域或uncaughtException处理程序处理。2UnusedReserved3InternalJavaScriptParseErrorJavaScript源代码在启动Node进程时导致解析错误。很少见,只有在开发Node.js时才会出现。4InternalJavaScriptEvaluationFailureJavaScript的源代码启动Node进程并在评估期间返回函数失败。很少见,只有在开发Node.js时才会出现。5致命错误V8致命的不可恢复错误。通常打印到stderr,内容为:FATALERROR6Non-functionInternalExceptionHandlerUncaught异常,内部异常处理函数由于某种原因被设置为on-function,无法调用。7InternalExceptionHandlerRun-TimeFailure未捕获异常,异常处理程序在处理时抛出异常。例如,如果process.on('uncaughtException')或domain.on('error')抛出异常。8UnusedReserved9InvalidArgument可能是给定了一个未知的参数,或者给定的参数没有值。10InternalJavaScriptRun-TimeFailureJavaScript的源代码在启动Node进程时抛出错误,这种情况非常罕见,只有在开发Node时才会发生。12设置了无效的调试参数参数--debug和/或--debug-brk,但选择了错误的端口。128信号退出如果Node接收到致命信号,例如SIGKILL或SIGHUP,则退出代码为128加上信号代码。这是标准的Unix做法,退出代码位于高位。beforeExit:当Node.js清空其事件循环并且没有更多工作要安排时,将触发'beforeExit'事件。通常,Node.js进程会在没有工作安排时退出,但是在'beforeExit'事件上注册的侦听器可以进行异步调用,从而导致Node.js进程继续运行。process.exitCode的值作为调用监听回调函数时的唯一参数传入。对于导致显式终止的条件,例如调用process.exit()或未捕获的异常,不会触发'beforeExit'事件。'beforeExit'不应用作'exit'事件的替代,除非计划安排额外的工作。process.on('beforeExit',function(code){setTimeout(function(){console.log('代码将永远执行。')})console.log('退出代码为:'+code)})console.log('programexecutionend')事件上注册的监听器可以被异步调用,导致Node.js进程继续执行。这就是这段代码不会停止的原因。uncaughtException:当异常冒泡回到事件循环时触发此事件。如果将监视器添加到异常,则不会发生默认操作(打印堆栈跟踪并退出)。写个例子吧process.on('uncaughtException',err=>{console.log(err+'caughtexception')})leta=1console.log(b)//为定义的堆变量b打印一个结果Signal事件:当进程接收到信号时触发。有关信号列表,请参见标准POSIX信号名称,例如SIGINT、SIGUSR1等。Processattribute1stdout标准输出流。2stderr标准错误流。3stdin标准输入流。4当从命令行执行脚本时,argvargv属性返回一个由各种参数组成的数组。它的第一个成员始终是node,第二个成员是脚本文件名,其余成员是脚本文件的参数。5execPath返回执行当前脚本的Node二进制文件的绝对路径。6execArgv返回一个数组,其成员为命令行下执行脚本时Node可执行文件和脚本文件之间的命令行参数。7env返回一个对象,其成员是当前shell的环境变量。8exitCode进程退出时的代码。如果进程通过process.exit()退出,则不需要指定退出码。9version节点版本,比如v0.10.18。10versions是包含节点及其依赖项版本的属性。11config是一个对象,包含用于编译当前节点执行文件的javascript配置选项。它与运行./configure脚本生成的“config.gypi”文件相同。12pid当前进程的进程号。13title进程名称,默认值为“node”,你可以自定义这个值。14arch当前CPU的架构:'arm'、'ia32'或'x64'。15platform程序运行的平台系统是'darwin','freebsd','linux','sunos'or'win32'16mainModulerequire.main的替代方法。不同的是,如果主模块在运行时发生变化,require.main可能会继续返回旧模块。可以假设两者指的是同一个模块。示例//输出到终端process.stdout.write('HelloWorld'+'\n')//读取参数process.argv.forEach((val,index,array)=>{console.log(index+':'+val)})//获取执行路径console.log(process.execPath)//平台信息console.log(process.platform)process提供了很多有用的属性,可以查看api一一了解。Process还有很多游泳方法,方便我们更好的控制系统的交互:1abort()这会导致节点触发abort事件。将导致节点退出并生成核心文件。2chdir(directory)改变当前工作进程的目录,如果操作失败则抛出异常。3cwd()返回当前进程的工作目录4exit([code])使用指定代码结束进程。如果省略,代码0.5getgid()将用于获取进程的组ID(请参阅getgid(2))。获取定时组的数字ID,而不是名称。注意:此功能仅适用于POSIX平台(例如,不适用于Windows和Android)。6setgid(id)设置进程的组ID(请参阅setgid(2))。可以接受数字ID或组名。如果指定了组名,它将阻止等待解析为数字ID。注意:此功能仅适用于POSIX平台(例如,不适用于Windows和Android)。7getuid()获取进程的用户ID(请参阅getuid(2))。这是数字用户ID,而不是用户名。注意:此功能仅适用于POSIX平台(例如,不适用于Windows和Android)。8setuid(id)设置进程的用户ID(请参阅setuid(2))。接受数字ID或字符串名称。如果指定了组名,它将阻塞等待解析为数字ID。注意:此功能仅适用于POSIX平台(例如,不适用于Windows和Android)。9getgroups()返回进程的组ID数组。POSIX系统不保证一定有,但是node.js保证了。注意:此功能仅适用于POSIX平台(例如,不适用于Windows和Android)。10setgroups(groups)设置进程的组ID。这是授权操作,因此您需要具有root权限,或者具有CAP_SETGID能力。注意:此功能仅适用于POSIX平台(例如,不适用于Windows和Android)。11initgroups(user,extra_group)读取/etc/group,并使用成员所属的所有组初始化组访问列表。这是授权操作,因此您需要具有root权限,或者具有CAP_SETGID能力。注意:此功能仅适用于POSIX平台(例如,不适用于Windows和Android)。12kill(pid[,signal])向进程发送信号。pid是进程id,signal是发送信号的字符串描述。信号名称是字符串,例如“SIGINT”或“SIGHUP”。如果省略,信号将为“SIGTERM”。13memoryUsage()返回一个对象,以字节为单位描述Node进程使用的内存状态。14nextTick(callback)一旦当前事件循环结束,调用回调函数。15umask([mask])设置或读取进程文件的掩码。子进程从父进程继承掩码。如果掩码参数有效,则返回旧掩码。否则,返回当前掩码。16uptime()返回Node已经运行的秒数。17hrtime()以[seconds,nanoseconds]数组的形式返回当前进程的高分辨率时间。它与过去的任意事件有关。该值与日期无关,因此不受时钟漂移的影响。主要目的是通过精确的时间间隔来衡量程序的性能。您可以将之前的结果传递给当前的process.hrtime(),它会返回两者之间的时间差,用于基准测试和测量时间间隔。//输出当前目录console.log('currentdirectory:'+process.cwd());//输出当前版本console.log('Currentversion:'+process.version);//输出内存使用情况console.日志(进程。内存使用());
