Process
进程对象是一个全局对象,可以从任何地方访问。 进程对象中有几种可用的方法。
流程事件
进程对象是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 }