跳到主要内容

process

process 对象提供有关当前 Node.js 进程的信息并对其进行控制。

进程事件


beforeExit 事件

disconnect 事件

exit 事件

message 事件

rejectionHandled 事件

uncaughtException 事件

uncaughtExceptionMonitor 事件

unhandledRejection 事件

warning 事件

worker 事件

process.abort()


process.abort() 方法会导致 Node.js 进程立即退出并生成一个核心文件。此特性在 Worker 线程中不可用。

process.allowedNodeEnvironmentFlags


process.allowedNodeEnvironmentFlags 属性是 NODE_OPTIONS 环境变量中允许的特殊的只读 Set 标志。

process.arch


process.arch为其编译 Node.js 二进制文件的操作系统 CPU 架构。 可能的值为:'arm'、'arm64'、'ia32'、'mips'、'mipsel'、'ppc'、'ppc64'、's390'、's390x'、以及 'x64'。

process.argv


process.argv 属性返回数组,其中包含启动 Node.js 进程时传入的命令行参数。 第一个元素将是 process.execPath。 如果需要访问 argv[0] 的原始值,请参阅 process.argv0。 第二个元素将是正在执行的 JavaScript 文件的路径。 其余元素将是任何其他命令行参数。

process.argv0


process.argv0 属性存储了 Node.js 启动时传入的 argv[0] 原始值的只读副本。

process.channel


如果 Node.js 进程是使用 IPC 通道衍生(参见子进程文档),则 process.channel 属性是对 IPC 通道的引用。 如果不存在 IPC 通道,则此属性为 undefined。

process.channel.ref()


如果之前已调用过 .unref(),则此方法使 IPC 通道保持进程的事件循环运行。通常,这是通过 process 对象上的 'disconnect' 和 'message' 监听器的数量来管理的。 但是,此方法可用于显式请求特定行为。

process.channel.unref()


此方法使 IPC 通道不会保持进程的事件循环运行,并且即使在通道打开时也让它完成。通常,这是通过 process 对象上的 'disconnect' 和 'message' 监听器的数量来管理的。 但是,此方法可用于显式请求特定行为。

process.chdir(directory)


process.chdir() 方法更改 Node.js 进程的当前工作目录,如果失败则抛出异常(例如,如果指定的 directory 不存在)。

process.config


process.config 属性返回 Object,其中包含用于编译当前 Node.js 可执行文件的配置选项的 JavaScript 表示。 这与运行 ./configure 脚本时生成的 config.gypi 文件相同。

process.connected


process.connected 如果 Node.js 进程使用 IPC 通道衍生(参见子进程和集群文档),则只要 IPC 通道连接,process.connected 属性将返回 true,并在调用 process.disconnect() 后返回 false。一旦 process.connected 为 false,就不能再使用 process.send() 通过 IPC 通道发送消息。

process.cpuUsage([previousValue])


process.cpuUsage() 方法在具有属性 user 和 system 的对象中返回当前进程的用户和系统 CPU 时间使用情况,其值为微秒值(百万分之一秒)。 这些值分别测量在用户和系统代码中花费的时间,如果多个 CPU 内核为此进程执行工作,则最终可能会大于实际经过的时间。

process.cwd()


process.cwd() 方法返回 Node.js 进程的当前工作目录。

process.debugPort


启用时 Node.js 调试器使用的端口。

process.disconnect()


如果 Node.js 进程是使用 IPC 通道衍生(参见子进程和集群文档),则 process.disconnect() 方法将关闭通往父进程的 IPC 通道,一旦没有其他连接使其保持活动状态,则允许子进程正常退出。

process.dlopen(module, filename[, flags])


process.dlopen() 方法允许动态加载共享对象。 require() 主要用于加载 C++ 插件,除非特殊情况,否则不应直接使用。 换句话说,require() 应该优先于 process.dlopen(),除非有特定的原因,例如自定义 dlopen 标志或从 ES 模块加载。

process.emitWarning(warning[, options])


process.emitWarning() 方法可用于触发自定义或特定于应用程序的进程警告。 这些可以通过向 'warning' 事件添加句柄来监听。

process.emitWarning(warning[, type[, code]][, ctor])


process.emitWarning(warning[, type[, code]][, ctor]) 方法可用于触发自定义或特定于应用程序的进程警告。 这些可以通过向 'warning' 事件添加句柄来监听。

process.env


process.env 属性返回包含用户环境的对象。 参见 environ(7)。

process.execArgv


process.execArgv 属性返回 Node.js 进程启动时传入的一组特定于 Node.js 的命令行选项。 这些选项不会出现在 process.argv 属性返回的数组中,也不包括 Node.js 可执行文件、脚本名称或脚本名称后面的任何选项。 这些选项可用于衍生与父进程具有相同执行环境的子进程。

process.execPath


process.execPath 属性返回启动 Node.js 进程的可执行文件的绝对路径名。 符号链接(如果有)会被解析。

process.exit([code])


process.exit([code]) 方法指示 Node.js 以 code 的退出状态同步终止进程。 如果省略 code,则退出将使用“成功”代码 0 或 process.exitCode 的值(如果已设置)。 直到所有 'exit' 事件监听器都被调用,Node.js 才会终止。

process.exitCode


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

process.getActiveResourcesInfo()


**process.getActiveResourcesInfo()**方法返回字符串数组,其中包含当前保持事件循环活动的活动资源的类型。

process.getegid()


process.getegid() 方法返回 Node.js 进程的数字有效群组标识。 (

process.geteuid()


process.geteuid() 方法返回进程的数字有效用户身份。

process.getgid()


process.getgid() 法返回进程的数字群组标识。

process.getgroups()


process.getgroups() 方法返回带有补充组 ID 的数组。 POSIX 不指定是否包含有效组 ID,但 Node.js 确保它始终包含。

process.getuid()


process.getuid() 方法返回进程的数字用户标识。

process.hasUncaughtExceptionCaptureCallback()


指示是否已使用 process.setUncaughtExceptionCaptureCallback() 设置回调。

process.hrtime([time])


process.hrtime() 方法在 [seconds, nanoseconds] 元组 Array 中返回当前高解析度实时,其中 nanoseconds 是无法以秒精度表示的实时剩余部分。

process.hrtime.bigint()


process.hrtime() 方法的 bigint 版本以纳秒为单位返回当前高解析度实时作为 bigint。

process.initgroups(user, extraGroup)#


process.initgroups() 方法读取 /etc/group 文件并使用用户所属的所有组初始化组访问列表。 这是一个特权操作,要求 Node.js 进程具有 root 访问权限或 CAP_SETGID 能力。

process.kill(pid[, signal])


process.kill() 方法将 signal 发送到由 pid 标识的进程。

process.memoryUsage()


返回描述 Node.js 进程的内存使用量(以字节为单位)的对象。

process.memoryUsage.rss()


process.memoryUsage.rss() 方法返回以字节为单位表示驻留集大小的整数 (RSS)。

process.nextTick(callback[, ...args])


**process.nextTick()**将 callback 添加到"下一个滴答队列"。 在 JavaScript 堆栈上的当前操作运行完成之后,且在允许事件循环继续之前,此队列将被完全排空。 如果递归地调用 process.nextTick(),则可能会创建无限的循环。

语法

process.nextTick(()=>{},[, ...args])
  • callback: 回调函数
  • ...args: 当调用 callback 时要传入的额外参数

场景

  • 包装回调,允许在调用回调之前初始化所有的变量、函数

    • 未使用process.nextTick()包装的场景: 回调函数先于变量初始化、赋值执行,所以结果为undefined

      let bar;

      function foo(callback) {
      callback();
      }

      foo(() => {
      console.log("bar", bar);
      });

      bar = 1;
    • 使用process.nextTick()保证回调函数在所有的变量初始化、赋值完成之后执行

      let bar;

      function foo(callback) {
      process.nextTick(callback);
      }

      foo(() => {
      console.log("bar", bar);
      });

      bar = 1;
  • 包装回调,允许回调在事件循环之前执行

对比

  • setImmediate()setTimeout()对比

    • 针对调用时机: setImmediate()setTimeout() 很类似,但是基于被调用的时机,他们也有不同表现:

      • setImmediate() 在当前poll阶段完成后check阶段执行脚本
      • setTimeout() 在最小阈值(ms 单位)过后运行脚本。poll阶段为空闲时,且设定时间到达后执行,但它在timer阶段执行
    • 针对调用顺序: 执行计时器的顺序将根据调用它们的上下文而异

      • 如果二者都从主模块内调用: 则计时器将受进程性能的约束(这可能会受到计算机上其他正在运行应用程序的影响),执行两个计时器的顺序是非确定性的

        setTimeout(() => {
        console.log('timeout');
        }, 0);

        setImmediate(() => {
        console.log('immediate');
        });
      • 如果二者都在I/O循环内调用: setImmediate 总是被优先调用

        const fs = require('fs');

        fs.readFile(__filename, () => {
        setTimeout(() => {
        console.log('timeout');
        }, 0);
        setImmediate(() => {
        console.log('immediate');
        });
        });
      • 使用 setImmediate() 相对于 setTimeout() 的主要优势: 如果 setImmediate() 是在 I/O 周期内被调度的,那它将会在其中任何的定时器之前执行,跟这里存在多少个定时器无关

  • process.nextTick()setImmediate() 对比

    • 从执行时机上来看:

      • process.nextTick() 在同一个阶段立即执行。
      • setImmediate() 在事件循环的接下来的迭代或 'tick' 上触发。

      实质上,这两个名称应该交换,因为 process.nextTick()setImmediate() 触发得更快,但这是过去遗留问题,因此不太可能改变。我们建议开发人员在所有情况下都使用 setImmediate(),因为它更容易理解。

    • 从事件循环阶段来看:

      • process.nextTick: process.nextTick 从技术上讲不是事件循环的一部分。process.nextTick()方法将 callback 添加到next tick队列。 一旦当前事件轮询队列的任务全部完成,在next tick队列中的所有callbacks会被依次调用,并且优先于其他 microtask 执行
      • setImmediate
    • 从设计理念的角度来看:

      • process.nextTick: process.nextTick 可以保证回调在其余代码(比如说 初始化所有的变量、函数)之后、事件循环之前执行回调函数。为了实现这一点,JS 调用栈被允许展开,然后立即执行提供的回调,允许进行递归调用 process.nextTick(),而不触碰 RangeError: 超过 V8 的最大调用堆栈大小 限制。
      • setImmediate:
    • 从使用场景、存在意义来看(为什么要使用):

      • process.nextTick:
        • 允许用户处理错误,清理任何不需要的资源,或者在事件循环继续之前重试请求
        • 有时有让回调在栈展开后,但在事件循环继续之前运行的必要
      • setImmediate:

process.noDeprecation


process.noDeprecation 属性指示是否在当前 Node.js 进程上设置了 --no-deprecation 标志。 有关此标志行为的更多信息,请参阅 'warning' 事件和 emitWarning() 方法的文档。

process.pid


process.pid 属性返回进程的 PID。

process.platform


process.platform 属性返回用于标识编译 Node.js 二进制文件的操作系统平台的字符串。

process.ppid


process.ppid 属性返回当前进程的父进程的 PID。

process.release


process.release 属性返回 Object,其中包含与当前版本相关的元数据,包括源 tarball 和 headers-only tarball 的网址。

process.report


process.report 是一个对象,其方法用于为当前进程生成诊断报告。 报告文档中提供了额外文档。

process.report.compact

以紧凑的单行 JSON 格式编写报告,与专为人类使用而设计的默认多行格式相比,日志处理系统更易于使用。

process.report.directory

process.report.filename

process.report.getReport([err])

process.report.reportOnFatalError

process.report.reportOnSignal

process.report.reportOnUncaughtException

process.report.signal

process.report.writeReport([filename][, err])

process.resourceUsage()


返回: <Object> 当前进程的资源使用情况。 所有这些值都来自返回 uv_rusage_t struct 的 uv_getrusage 调用。

process.send(message[, sendHandle[, options]][, callback])


process.send(message[, sendHandle[, options]][, callback]) : 如果 Node.js 进程是通过进程间通信产生的,那么,process.send() 方法可以用来给父进程发送消息。 接收到的消息被视为父进程的 ChildProcess 对象上的一个 message 事件。如果 Node.js 进程不是通过进程间通信产生的, process.send() 会是 undefined

语法

process.setegid(id)


process.setegid() 方法设置进程的有效群组标识。

process.seteuid(id)


process.seteuid() 方法设置进程的有效用户身份。

process.setgid(id)


process.setgid() 方法设置进程的群组标识。 (请参阅 setgid(2)。)id 可以作为数字 ID 或群组名称字符串传入。 如果指定了群组名,则此方法在解析关联的数字 ID 时会阻塞。

process.setgroups(groups)


process.setgroups() 方法为 Node.js 进程设置补充群组 ID。 这是一个特权操作,需要 Node.js 进程具有 root 或 CAP_SETGID 能力。

process.setuid(id)


process.setuid(id) 方法设置进程的用户身份。

process.setSourceMapsEnabled(val)


process.setUncaughtExceptionCaptureCallback(fn)


process.setUncaughtExceptionCaptureCallback() 函数设置一个函数,当发生未捕获的异常时将调用该函数,该函数将接收异常值本身作为其第一个参数。

process.stderr


process.stderr.fd

process.stdin


process.stdin.fd

process.stdout


process.stdout.fd

process.throwDeprecation


process.title


process.traceDeprecation


process.umask()


process.umask(mask)


process.uptime()


process.version


process.versions


参考资料


Node.js 中文网