Skip to content

NodeJS 系统模块 #51

@coconilu

Description

@coconilu

1. os

os 模块提供了一些操作系统相关的实用方法。

API:

os.EOL,一个字符串常量,定义操作系统相关的行末标志。
os.arch(),返回一个字符串, 表明 Node.js 二进制编译所用的操作系统CPU架构。
os.constants,返回一个包含错误码,处理信号等通用的操作系统特定常量的对象。
os.cpus(),返回一个对象数组, 包含每个逻辑 CPU 内核的信息。
os.endianness()
os.freemem(),以整数的形式回空闲系统内存 的字节数。
os.homedir(),以字符串的形式返回当前用户的home目录。
os.hostname(),以字符串的形式返回操作系统的主机名。
os.loadavg(),返回一个数组,包含1, 5, 15分钟平均负载。
os.networkInterfaces(),返回一个对象,包含只有被赋予网络地址的网络接口。
os.platform(),返回一个字符串, 指定Node.js编译时的操作系统平台。
os.release(),返回一个字符串, 指定操作系统的发行版。
os.tmpdir(),返回一个字符串, 表明操作系统的默认临时文件目录。
os.totalmem(),以整数的形式返回所有系统内存的字节数。
os.type(),返回一个字符串,表明操作系统的名字。
os.uptime(),在几秒内返回操作系统的上线时间。
os.userInfo([options]),返回的对象包括 username, uid, gid, shell,  homedir. 在Windows系统上, uid  gid 域是 -1, and shell是 null。

os.constants:

  1. 信号常量
  2. 错误常量
  • POSIX 错误常量
  • Windows 系统特有的错误常量
  1. dlopen常量
  2. libuv常量

2. process

process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。 因为是全局变量,所以无需使用 require()。

事件:

beforeExit,当 Node.js 的事件循环数组已经为空,并且没有额外的工作被添加进来,事件 'beforeExit' 会被触发。
disconnect,如果 Node.js 进程是由 IPC 通道的方式创建的(详见子进程和集群文档),当 IPC 通道关闭时,会触发'disconnect'事件。
exit,两种情况下 'exit' 事件会被触发:显式调用 process.exit() 方法,使得 Node.js 进程即将结束;Node.js 事件循环数组中不再有额外的工作,使得 Node.js 进程即将结束。
message,如果 Node.js 进程是由 IPC 通道的方式创建的(详见子进程和集群文档),当子进程收到父进程发送的消息时(消息通过 childprocess.send() 发送),会触发 'message' 事件。
rejectionHandled,如果有 Promise  rejected,并且此 Promise在 Node.js 事件循环的下次轮询及之后期间,被绑定了一个错误处理器(例如使用 promise.catch()),会触发 'rejectionHandled' 事件。
uncaughtException,如果 Javascript 未捕获的异常,沿着代码调用路径反向传递回事件循环,会触发 'uncaughtException' 事件。
unhandledRejection,如果在事件循环的一次轮询中,一个 Promise  rejected,并且此 Promise 没有绑定错误处理器,'unhandledRejection 事件会被触发。
warning,任何时候Node.js发出进程告警,都会触发'warning'事件。
信号事件:

API:

process.abort()
process.arch
process.argv
process.argv0
process.channel,如果Node.js进程是由IPC channel(请看 Child Process 文档) 方式创建的,process.channel属性保存IPC channel的引用。
process.chdir(directory)
process.config
process.connected,如果Node.js进程是由IPC channel方式创建的(请看Child Process子进程  Cluster集群 文档) 只要IPC channel保持连接,process.connected属性就会返回true。 process.disconnect()被调用后,此属性会返回false。
process.cpuUsage([previousValue])
process.cwd()
process.debugPort
process.disconnect(),如果 Node.js 进程是从IPC频道派生出来的(具体看 Child Process   Cluster 的文档), process.disconnect()函数会关闭到父进程的IPC频道,以允许子进程一旦没有其他链接来保持活跃就优雅地关闭。
process.dlopen(module, filename[, flags])
process.emitWarning(warning[, options]),用于发出定制的或应用特定的进程警告。
process.emitWarning(warning[, type[, code]][, ctor])
process.env,返回一个包含用户环境信息的对象。
process.execArgv,返回当Node.js进程被启动时,Node.js特定的命令行选项。
process.execPath,返回启动Node.js进程的可执行文件所在的绝对路径。
process.exit([code]),以结束状态码code指示Node.js同步终止进程。
process.exitCode,当进程正常结束,或通过process.exit()结束但未传递参数时,此数值标识进程结束的状态码。
process.getegid()
process.geteuid()
process.getgid()
process.getgroups()
process.getuid()
process.hasUncaughtExceptionCaptureCallback()
process.hrtime([time])
process.hrtime.bigint()
process.initgroups(user, extraGroup)
process.kill(pid[, signal]),即使这个函数的名称是process.kill(),它其实只是发送信号,这点与kill系统调用类似。 发送的信号可能是做一些与kill目标进程无关的事情。
process.mainModule
process.memoryUsage(),内存使用情况:rss、heapTotal、heapUsed、external。
    rss:常驻内存,由code segment(运行代码)、heap、stack、used heap
    external:对应的是C++对象(与V8管理的JS对象绑定)的占用的内存,比如Buffer的使用
process.nextTick(callback[, ...args]),将 callback 添加到"next tick 队列" 一旦当前事件轮询队列的任务全部完成,在next tick队列中的所有callbacks会被依次调用。
process.noDeprecation
process.pid,返回进程的PID。
process.platform
process.ppid,返回当前父进程的进程ID。
process.release
process.send(message[, sendHandle[, options]][, callback]),如果Node.js进程是通过进程间通信产生的,那么,process.send()方法可以用来给父进程发送消息。 接收到的消息被视为父进程的ChildProcess对象上的一个'message'事件。 
process.setegid(id)
process.seteuid(id)
process.setgid(id)
process.setgroups(groups)
process.setuid(id)
process.setUncaughtExceptionCaptureCallback(fn)
process.stderr
process.stdin
process.stdout
process.throwDeprecation
process.title
process.traceDeprecation
process.umask([mask])
process.uptime()
process.version,返回Node.js的版本信息。
process.versions,返回一个对象,此对象列出了Node.js和其依赖的版本信息。 

3. child_process

child_process 模块提供了衍生子进程的功能。

默认情况下,Node.js 的父进程与衍生的子进程之间会建立 stdin、stdout 和 stderr 的管道。 数据能以非阻塞的方式在管道中流通。 有些程序会在内部使用行缓冲 I/O,虽然这并不影响 Node.js,但发送到子进程的数据可能无法被立即使用。

创建异步进程:

  1. child_process.spawn(),异步地衍生子进程,且不会阻塞 Node.js 事件循环。
  2. child_process.fork(),衍生一个新的 Node.js 进程,并通过建立 IPC 通讯通道来调用指定的模块,该通道允许父进程与子进程之间相互发送信息。
  3. child_process.exec(),衍生一个 shell 并在 shell 上运行命令,当完成时会传入 stdout 和 stderr 到回调函数。
  4. child_process.execFile(),类似 child_process.exec(),但直接衍生命令,且无需先衍生 shell。

创建同步进程:

  1. child_process.spawnSync()
  2. child_process.execSync()
  3. child_process.execFileSync()

ChildProcess:
事件:

close,当子进程的 stdio 流被关闭时会触发 'close' 事件。
disconnect,在父进程中调用 subprocess.disconnect() 或在子进程中调用 process.disconnect() 后会触发 'disconnect' 事件。
error
exit,子进程结束后会触发 'exit' 事件。
message,当一个子进程使用 process.send() 发送消息时会触发 'message' 事件。

API:

subprocess.channel,当前子进程的 IPC 通道的引用。
subprocess.connected
subprocess.disconnect(),关闭父进程与子进程之间的 IPC 通道,一旦没有其他的连接使其保持活跃,则允许子进程正常退出。
subprocess.kill([signal]),向子进程发送一个信号。
subprocess.killed
subprocess.pid,子进程的进程标识(PID)。
subprocess.send(message[, sendHandle[, options]][, callback]),当父进程和子进程之间建立了一个 IPC 通道时(例如,使用 child_process.fork()),subprocess.send() 方法可用于发送消息到子进程。 当子进程是一个 Node.js 实例时,消息可以通过 [process.on('message')] 事件接收。
subprocess.stderr,代表子进程的 stderr 的可读流。
subprocess.stdin,代表子进程的 stdin 的可写流。
subprocess.stdio,一个到子进程的管道的稀疏数组。subprocess.stdio[0]、subprocess.stdio[1]  subprocess.stdio[2] 分别可用作 subprocess.stdin、 subprocess.stdout  subprocess.stderr。
subprocess.stdout,代表子进程的 stdout 的可读流。

4. cluster

Node.js在单个线程中运行单个实例。 用户(开发者)为了使用现在的多核系统,有时候,用户(开发者)会用一串Node.js进程去处理负载任务。

事件:

disconnect,在工作进程的IPC管道被断开后触发本事件。
exit,当任何一个工作进程关闭的时候,cluster模块都将触发'exit'事件。
fork,当新的工作进程被fork时,cluster模块将触发'fork'事件。 
listening,当一个工作进程调用listen()后,工作进程上的server会触发'listening' 事件,同时主进程上的 cluster 也会被触发'listening'事件。
message,当cluster主进程接收任意工作进程发送的消息后被触发。
online,当新建一个工作进程后,工作进程应当响应一个online消息给主进程。当主进程收到online消息后触发这个事件。 'fork' 事件和 'online'事件的不同之处在于,前者是在主进程新建工作进程后触发,而后者是在工作进程运行的时候触发。
setup,每当 .setupMaster() 被调用的时候触发。

API:

cluster.disconnect([callback]),在cluster.workers的每个工作进程中调用 .disconnect()
cluster.fork([env]),衍生出一个新的工作进程。
cluster.isMaster,当该进程是主进程时,返回 true。
cluster.isWorker,当进程不是主进程时,返回 true。
cluster.schedulingPolicy,调度策略,包括循环计数的 cluster.SCHED_RR,以及由操作系统决定的cluster.SCHED_NONE。 这是一个全局设置,当第一个工作进程被衍生或者调动cluster.setupMaster()时,都将第一时间生效。
cluster.settings
cluster.setupMaster([settings])
cluster.worker,当前工作进程对象的引用,对于主进程则无效。
cluster.workers,这是一个哈希表,储存了活跃的工作进程对象,id作为key。有了它,可以方便地遍历所有工作进程。只能在主进程中调用。

Worker

Worker对象包含了关于工作进程的所有public信息和方法。

事件:

disconnect
error
exit
listening
message
online

API:

worker.disconnect()
worker.exitedAfterDisconnect,当调用 .kill() 或者 .disconnect()方法时被设置,在这之前都是 undefined。
worker.id,每一个新衍生的工作进程都会被赋予自己独一无二的编号,这个编号就是储存在id里面。
worker.isConnected(),当工作进程通过IPC管道连接至主进程时,这个方法返回true,否则返回false。
worker.isDead(),当工作进程被终止时(包括自动退出或被发送信号),这个方法返回true ,否则返回false。
worker.kill([signal='SIGTERM']),这个方法将会kill工作进程。
worker.process,所有的工作进程都是通过child_process.fork()来创建的,这个方法返回的对象被存储为.process。
worker.send(message[, sendHandle][, callback]),发送一个消息给工作进程或主进程,也可以附带发送一个handle。

5. fs

fs 模块提供了一些 API,用于以一种类似标准 POSIX 函数的方式与文件系统进行交互。

  1. fs.FSWatcher
    fs.watch()返回的对象。监视的目录或文件。

  2. fs.ReadStream
    成功调用fs.createReadStream()会返回一个新的 fs.ReadStream 对象。

  3. fs.Stats
    fs.stat()返回的对象。fs.Stats 对象提供了一个文件的信息。

  4. fs.WriteStream
    成功调用 fs.createWriteStream() 会返回一个新的 fs.WriteStream对象。WriteStream 是一个可写流。

  5. fs.constants
    返回一个包含常用文件系统操作的常量的对象。

6. repl

repl (交互式解释器)模块提供了一种“读取-求值-输出”循环(REPL)的实现,它可作为一个独立的程序或嵌入到其他应用中。

该模块的作用是启动一个 REPL。 其他 REPL 客户端可以通过 Unix socket 或 TCP socket 进行连接。 例如,可以使用 telnet 连接到 TCP socket,使用 socat 连接到 Unix socket 或 TCP socket。

7. tty

终端。

8. V8

v8 模块暴露了特定于V8版本内置到 Node.js 二进制文件中的API。

9. vm

vm 模块提供了一系列 API 用于在 V8 虚拟机环境中编译和运行代码。

参考

os
process
child_process
cluster

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions