nodejs的process和child_process模块

1,624 阅读4分钟

命令

一条命令基本包含三部分

  1. 命令
  2. 选项
  3. 参数
webpack --config ./config.js

上述命令中

webpack - 命令
--config - 选项
./config.js - 参数

process的介绍及其相关属性和方法

在node应用执行期间一直存在的一个对象,该对象包含了当前进程执行的相关信息,并且可以通过process对其进行控制。

process对象是EventEmmitter的实例

相关事件

  1. 'beforeExit' 该事件在事件循环清空的时候调用。

  2. 'exit' node进程因为以下情况退出的时候,会触发该事件。该事件的回调函数中只能指向同步代码。

    • 显示的调用 process.exit()方法
    • 事件循环被清空,且不再执行任何工作。
  3. 'warning' node进程发出的警告总会触发该事件

相关方法

  1. process.exit() 退出进程

  2. process.abort() 立即结束进程,并生成一个core文件

  3. process.arch 返回一个表示cup架构的字符串

  4. process.argv 返回一个数组,该数组的第一个元素是node.exe的绝对路径,第二个元素是运行的脚本文件绝对路径,后边的元素是传入的参数。在传入参数的时候,可以传入多个,用空格隔开。

  5. process.argv0 返回的是node.exe的绝对路径

  6. process.cwd() 获取当前node进程的工作目录,一般默认是命令行所在的目录。

  7. process.chdir() 接收一个路径,改变当前进程的工作目录。(一般模块引用相对目录的参照目录是当前模块所在的目录,而操作静态文件的相对目录是工作目录,__diranme永远指的是当前模块所在的目录)

  8. process.env 返回一个当前系统环境变量的对象

  9. process.execPath 返回node.exe的绝对路径

  10. process.exitCode 如果通过exit方法退出进程的时候未指定退出码的话,那么该属性的值将作为退出码

  11. process.memoryUsage() 该方法返回内存使用情况

  12. process.stdin 返回连接至控制台输入的一个流,该流可以监听可读(readable)事件,当控制台输入完毕时触发。可通过process.stdin.read方法从流中读取数据,读取的数据格式为Buffer。也可以监听data事件,此时回调的参数就是读取的数据也是Buffer模式。

  13. process.stdout 返回一个链接至控制台的输出的一个流,process.studout.write()可以向控制台输出内容。

控制台登录

<<< @/docs/nodejs/process/src/login.js

child_process模块

child_process模块提供了可以衍生子进程的能力,分别提供了child_process.spawnchild_process.spawnSync方法,用来异步和同步的创建子进程,还有其他的衍生子进程的方法都是基于这两个方法的。

child_process.spawn

- command <string> 要运行的命令。
- args <string[]> 字符串参数的列表。
- options <Object>

  - cwd <string> 子进程的当前工作目录。
  - env <Object> 环境变量的键值对。默认值: process.env。
  - argv0 <string> 显式地设置发送给子进程的 argv[0] 的值。如果没有指定,则将会被设置为 command 的值。
  - stdio <Array> | <string> 子进程的 stdio 配置。
  - detached <boolean> 父进程停止后,子进程是否独立运行,具体行为取决于平台。
  - uid <number> 设置进程的用户标识
  - gid <number> 设置进程的群组标识
  - serialization <string> 指定用于在进程之间发送消息的序列化类型。可能的值为 'json''advanced'默认值: 'json'。
  - shell <boolean> | <string> 如果为 true,则在 shell 中运行 command。 在 Unix 上使用 '/bin/sh',在 Windows 上使用 process.env.ComSpec。 可以将不同的 shell 指定为字符串。 参阅 shell 的要求与 Windows 默认的 shell。 默认值: false(没有 shell)。
  - windowsVerbatimArguments <boolean> 在 Windows 上不为参数加上引号或转义。在 Unix 上忽略。如果指定了 shell 并且是 CMD,则自动设为 true。默认值: false。
  - windowsHide <boolean> 隐藏子进程的控制台窗口(在 Windows 系统上通常会创建)。默认值: false。
- 返回: <ChildProcess>

该方法返回一个ChildProcess类型的对象,该对象上有 stdin stdout stderr这三个属性分别连接输入、输出、报错的流。

child_process.exec

- command <string> 要运行的命令,并带上以空格分隔的参数。
- options <Object>

  - cwd <string> 子进程的当前工作目录。默认值: null。
  - env <Object> 环境变量的键值对。默认值: process.env。
  - encoding <string> 默认值: 'utf8'。
  - shell <string> 用于执行命令的 shell。默认值: Unix 上是 '/bin/sh',- - - Windows 上是 process.env.ComSpec。
  - timeout <number> 默认值: 0。
  - maxBuffer <number> stdout 或 stderr 上允许的最大字节数。如果超过限制,则子进程会被终止并且截断任何输出。默认值: 1024 * 1024。
  - killSignal <string> | <integer> 默认值: 'SIGTERM'。
  - uid <number> 设置进程的用户标识
  - gid <number> 设置进程的群组标识
  - windowsHide <boolean> 隐藏子进程的控制台窗口(在 Windows 系统上通常会创建)。)。默认值: false。
- callback <Function> 当进程终止时调用并带上输出。

  - error <Error>
  - stdout <string> | <Buffer>
  - stderr <string> | <Buffer>
- 返回: <ChildProcess>

衍生一个 shell 然后在该 shell 中执行 command,并缓冲任何产生的输出