调用外部程序的四个异步方法分别是:execFile, spawn, exec 和 fork,四个方法的返回值都是 ChildProcess 实例,ChildProcess 实例拥有 Process 的一部分常用功能,例如:pid, stdin, stdout, stderr,等。他们的具体用法以及区别如下:

execFile

  • 可以调用 js 脚本代码(执行 node a.js),也可以调用其他类型的程序;
  • 父子进程不分离,且不可设为父子进程分离,基于回调 Buffer 获取子进程输出;
  • 父子进程可以使用信号量通信;

spawn

  • 可以调用 js 脚本代码(执行 node a.js),也可以调用其他类型的程序;
  • 默认父子进程不分离,可以设为父子进程分离,基于流获取子进程输出;
  • 父子进程可以使用信号量通信;

exec

  • 可以调用 js 脚本代码(执行 node a.js),也可以调用其他类型的程序;
  • 可以使用 shell 外壳的一些用法,例如:重定向,管道操作,通配符,等;
  • 父子进程不分离,且不可设为父子进程分离,基于回调 Buffer 获取子进程输出;
  • 父子进程可以使用信号量通信;

fork

  • fork 方法只能调用 js 脚本代码,或者说专门用来调用 js 脚本代码,非 js 脚本的其他程序,不能调用;
  • fork 方法默认父子进程分离,并基于流获取子进程输出;
  • 因为父子进程分离,所以子进程的流默认重定向到控制台;
  • 不需要像 spawn(detach=false),通过 pipe 调用将子进程的流重定向到父进程的 stdout 上;
  • fork 除了信号量,还可以进程间通信;

同步方法

  • fork 没有同步方法,其他三个方法有同步方法。execSync 和 execFileSync 返回值 Buffer 就是子进程的输出结果。spawnSync 返回对象的 stdout Buffer 中是子进程的输出。

王顶
1.2k 声望107 粉丝

学无止境


« 上一篇
防御式编程