子进程(Child Processes)
子进程模块提供了衍生子进程的能力,这个能力和 popen(3) 方式上类似,但不完全相同。这种能力主要由 函数提供:
默认情况下,在 Node.js 的父进程和衍生的子进程之间会建立 stdin
、stdout
和 stderr
的管道。这也使得数据流可以以无阻塞的方式通过这些管道。但是请注意,有些程序内部使用行缓冲(line-buffered)I/O。虽然这并不影响 Node.js,它可能意味着发送到子过程数据可能无法立即消费。
为了方便起见, 模块提供了少有的同步和异步的替代品 和 child_process.spawnSync() 。请注意,这些替代品是在 child_process.spawn()
或 child_process.spawnSync()
的基础上实现的。
child_process.exec()
:衍生一个 shell 并在 shell 内部运行一个命令,当完成时,会向回调函数传递stdout
和stderr
。child_process.fork()
:衍生一个新的 Node.js 进程,并且通过建立一个允许父进程和子进程之间相互发送信息的 IPC 通讯通道来调用指定的模块。
对于某些使用情况,如自动化 shell 脚本,可能更方便。在多数情况下,同步的方法会显著地影响性能,因为它拖延了事件循环直到衍生进程完成。