/

如何在 Node.js 中生成子進程

如何在 Node.js 中生成子進程

了解如何在 Node.js 中生成子進程

Node.js 提供了child_process模組,它提供了生成子進程的功能。

引入該模組,並從中獲取spawn函數:

1
const { spawn } = require('child\_process')

然後你可以調用spawn()函數,並傳遞2個參數。

第一個參數是要運行的命令。

第二個參數是一個包含選項列表的數組。

這是一個例子:

1
spawn('ls', ['-lh', 'test'])

在這個例子中,你運行ls命令,並指定了2個選項:-lhtest。這將生成命令ls -lh test,結果會顯示有關該文件的詳細信息:

1
-rw-r--r-- 1 flaviocopes staff 6B Sep 25 09:57 test

spawn()函數的返回值是ChildProcess類的實例,用於識別生成的子進程。

這是一個稍微複雜一些的例子,完全可運行。我們在test文件上設置監聽,每當它發生變化時,就在它上運行ls -lh命令:

1
2
3
4
5
6
7
8
9
'use strict'

const fs = require('fs')
const { spawn } = require('child\_process')
const filename = 'test'

fs.watch(filename, () => {
const ls = spawn('ls', ['-lh', filename])
})

還有一個缺少的步驟。我們必須將子進程的輸出 pipe 到主進程,否則我們將無法看到它的任何輸出。

我們可以通過在子進程的stdout屬性上調用pipe()方法來實現:

1
2
3
4
5
6
7
8
9
10
'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)
})

tags: [“Node.js”, “child process”, “spawn”]