NodeJS
中 child_process
应该是比较常用的一个模块,比如想通过 NodeJS
调用 git
调用命令查看 git
状态,就需要 child_process.exec
。
NodeJS
在创建子进程的时候,会一并创建父子进程间的 stdin
、stdout
和 stderr
管道,分别用来输入、输出和输出错误,这些管道本身有着(依平台决定的)容量限制,下面的两个脚本可以用来测试容量限制:
# child.sh
i=1
while true; do
# 不断向txt写入文件,观察写入结果
i=$((i+1))
echo "this is line $i" >> "./test.txt"
echo "this is line $i"
done
// parent.js
const { spawn } = require('child_process')
main()
// 使用 exec 执行 child.sh 创建一个子进程
// 父进程延迟接收输出
// 在 stdout 达到限制之后,父进程开始接收输出之前,test.txt(即 child.sh 同步
// 写入的文件)体积会保持不变,在父进程接收输出之后则继续增大,表示子进程开始继续执行
function main () {
let child = spawn('./child.sh')
setTimeout(() => {
child.stdout.on('data', line => console.log(line))
}, 20 * 1000)
}