当前位置: 首页 > 文档资料 > Node.js 中文教程 >

Process

优质
小牛编辑
142浏览
2023-12-01

进程对象是一个全局对象,可以从任何地方访问。 进程对象中有几种可用的方法。

流程事件

进程对象是EventEmitter的一个实例,并发出以下事件 -

Sr.No.活动和描述
1

exit

当流程即将退出时发出。 此时无法阻止退出事件循环,并且一旦所有退出侦听器都已完成运行,该进程将退出。

2

beforeExit

当节点清空其事件循环并且没有其他任何计划时,将发出此事件。 通常,节点在没有调度工作时退出,但'beforeExit'的侦听器可以进行异步调用,并使节点继续。

3

uncaughtException

当异常一直回到事件循环时发出。 如果为此异常添加了侦听器,则不会发生默认操作(即打印堆栈跟踪并退出)。

4

Signal Events

当进程收到SIGINT,SIGHUP等信号时发出。

例子 (Example)

使用以下代码创建名为main.js的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");

现在运行main.js来查看结果 -

$ node main.js

验证输出。

Program Ended
About to exit with code: 0

退出代码

当没有更多异步操作挂起时,节点通常以0状态代码退出。 还有其他退出代码,如下所述 -

名称和描述
1

Uncaught Fatal Exception

有一个未捕获的异常,它不是由域或uncaughtException事件处理程序处理的。

2

Unused

由Bash保留用于内置滥用。

3

Internal JavaScript Parse Error

Node的引导过程内部的JavaScript源代码导致解析错误。 这种情况极为罕见,通常只能在Node本身的开发过程中发生。

4

Internal JavaScript Evaluation Failure

Node的引导过程中内部的JavaScript源代码在评估时未能返回函数值。 这种情况极为罕见,通常只能在Node本身的开发过程中发生。

5

Fatal Error

V8中存在致命的无法恢复的错误。 通常,将使用前缀FATAL ERROR将消息打印到stderr。

6

Non-function Internal Exception Handler

有一个未捕获的异常,但内部致命异常处理函数以某种方式设置为非函数,并且无法调用。

7

Internal Exception Handler Run-Time Failure

有一个未捕获的异常,并且内部致命异常处理程序函数本身在尝试处理它时引发了错误。

8

Unused

9

Invalid Argument

指定了未知选项,或者提供了需要值的选项而没有值。

10

Internal JavaScript Run-Time Failure

在调用bootstrapping函数时,Node的引导过程内部的JavaScript源代码会引发错误。 这种情况极为罕见,通常只能在Node本身的开发过程中发生。

11

Invalid Debug Argument

设置了--debug和/或--debug-brk选项,但选择了无效的端口号。

12

Signal Exits

如果Node收到致命信号,如SIGKILL或SIGHUP,则其退出代码将为128加上信号代码的值。 这是一种标准的Unix实践,因为退出代码定义为7位整数,信号出口设置高位,然后包含信号代码的值。

流程属性

Process提供了许多有用的属性,可以更好地控制系统交互。

Sr.No.财产和描述
1

stdout

stdout的可写流。

2

stderr

stderr的可写流。

3

stdin

stdin的可写流。

4

argv

包含命令行参数的数组。 第一个元素是'node',第二个元素是JavaScript文件的名称。 下一个元素将是任何其他命令行参数。

5

execPath

这是启动该进程的可执行文件的绝对路径名。

6

execArgv

这是启动该进程的可执行文件中特定于节点的命令行选项集。

7

env

包含用户环境的对象。

8

exitCode

当进程正常退出或通过process.exit()退出而不指定代码时,将成为进程退出代码的数字。

9

version

一个公开NODE_VERSION的编译属性。

10

versions

公开节点及其依赖项的版本字符串的属性。

11

config

一个Object,包含用于编译当前节点可执行文件的configure选项的JavaScript表示形式。 这与运行./configure脚本时生成的“config.gypi”文件相同。

12

pid

进程的PID。

13

title

Getter/setter设置'ps'中显示的内容。

14

arch

您正在运行的处理器架构:'arm','ia32'或'x64'。

15

platform

你正在运行什么平台:'darwin','freebsd','linux','sunos'或'win32'

16

mainModule

检索require.main的替代方法。 不同之处在于,如果主模块在运行时更改,则require.main可能仍会引用更改发生之前所需的模块中的原始主模块。 通常可以安全地假设两者指的是同一个模块。

例子 (Example)

使用以下代码创建名为main.js的js文件 -

// Printing to console
process.stdout.write("Hello World!" + "\n");
// Reading passed parameter
process.argv.forEach(function(val, index, array) {
   console.log(index + ': ' + val);
});
// Getting executable path
console.log(process.execPath);
// Platform Information 
console.log(process.platform);

现在运行main.js来查看结果 -

$ node main.js

在Linux机器上运行程序时验证输出 -

Hello World!
0: node
1: /web/com/1427106219_25089/main.js
/usr/bin/node
linux

方法参考

流程提供了许多有用的方法来更好地控制系统交互。

Sr.No方法和描述
1

abort()

它会导致节点发出中止。 它导致节点退出并生成核心文件。

2

chdir(directory)

更改进程的当前工作目录,如果失败则抛出异常。

3

cwd()

返回进程的当前工作目录。

4

exit([code])

使用指定的代码结束进程。 如果省略,则退出使用“成功”代码0。

5

getgid()

获取进程的组标识。 这是数字组ID,而不是组名。此功能仅适用于POSIX平台(即不是Windows,Android)。

6

setgid(id)

设置进程的组标识。 (参见setgid(2))。 它接受数字ID或组名字符串。 如果指定了groupname,则此方法会在将其解析为数字ID时阻塞。此功能仅适用于POSIX平台(即不适用于Windows,Android)。

7

getuid()

获取进程的用户标识。 这是数字ID,而不是用户名。此功能仅适用于POSIX平台(即Windows,Android)。

8

setuid(id)

设置进程的用户标识(请参阅setgid(2))。 它接受数字ID或用户名字符串。 如果指定了用户名,则此方法会在将其解析为数字ID时阻止。此功能仅适用于POSIX平台(即不适用于Windows,Android)。

9

getgroups()

返回具有补充组ID的数组。 如果包含有效的组ID,则POSIX不指定,但node.js确保它始终是。 此功能仅适用于POSIX平台(即Windows,Android)。

10

setgroups(groups)

设置补充组ID。 这是一种特权操作,这意味着您必须位于root或具有CAP_SETGID功能。 此功能仅适用于POSIX平台(即Windows,Android)。

11

initgroups(user, extra_group)

读取/ etc/group并使用用户所属的所有组初始化组访问列表。 这是一种特权操作,这意味着您必须位于root或具有CAP_SETGID功能。 此功能仅适用于POSIX平台(即Windows,Android)。

12

kill(pid[, signal])

向进程发送信号。 pid是进程id,signal是描述要发送的信号的字符串。 信号名称是'SIGINT'或'SIGHUP'之类的字符串。 如果省略,信号将为“SIGTERM”。

13

memoryUsage()

返回一个对象,描述以字节为单位测量的Node进程的内存使用情况。

14

nextTick(callback)

一旦当前事件循环转向运行完成,请调用回调函数。

15

umask([mask])

设置或读取进程的文件模式创建掩码。 子进程从父进程继承掩码。 如果给出了mask参数,则返回旧掩码,否则返回当前掩码。

16

uptime()

节点运行的秒数。

17

hrtime()

以[seconds,nanoseconds]元组数组返回当前的高分辨率实时。 它相对于过去的任意时间。 它与一天中的时间无关,因此不受时钟漂移的影响。 主要用于测量间隔之间的性能。

例子 (Example)

使用以下代码创建名为main.js的js文件 -

// Print the current directory
console.log('Current directory: ' + process.cwd());
// Print the process version
console.log('Current version: ' + process.version);
// Print the memory usage
console.log(process.memoryUsage());

现在运行main.js来查看结果 -

$ node main.js

在Linux机器上运行程序时验证输出 -

Current directory: /web/com/1427106219_25089
Current version: v0.10.33
{ rss: 11505664, heapTotal: 4083456, heapUsed: 2157704 }