调用外部程序的四个异步方法分别是: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 中是子进程的输出。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。