了解如何用Node.js催生一个子进程
Node.js提供了一个child_process 模块,提供了催生子进程的能力。
需要该模块,并从它那里获得spawn 函数。
const { spawn } = require('child_process')
然后你可以通过2个参数调用spawn() 。
第一个参数是要运行的命令。
第二个参数是一个包含选项列表的数组。
这里有一个例子。
spawn('ls', ['-lh', 'test'])
在这种情况下,你运行带有2个选项的ls 命令:-lh 和test 。这导致了命令ls -lh test ,(考虑到test 文件存在于你运行此命令的同一文件夹中),结果是关于该文件的详细信息。
-rw-r--r-- 1 flaviocopes staff 6B Sep 25 09:57 test
spawn() 函数调用的结果是一个ChildProcess 类的实例,该实例标识了被催生的子进程。
这里有一个稍微复杂的例子,完全可以工作。我们观察test 文件,只要它有变化,我们就对它运行ls -lh 命令。
'use strict'
const fs = require('fs')
const { spawn } = require('child_process')
const filename = 'test'
fs.watch(filename, () => {
const ls = spawn('ls', ['-lh', filename])
})
有一件事没做。我们必须将子进程的输出管道到主进程,否则我们将看不到它的任何输出。
我们通过调用子进程的stdout 属性上的pipe() 方法来做到这一点。
'use strict'
const fs = require('fs')
const { spawn } = require('child_process')
const filename = 'test'
fs.watch(filename, () => {
const ls = spawn('ls', ['-lh', filename])
ls.stdout.pipe(process.stdout)
})