image.png
node子进程里有4个方法,
- exec 主要用来执行一个shell方法,其内部还是调用了spawn ,不过他有最大缓存限制。
- execFile 同上。
- fork 这个用的比较多,子进程可以和父进程进行IPC通讯。
记住,衍生的 Node.js 子进程独立于父进程,但两者之间建立的 IPC 通信通道除外。 每个进程都有自己的内存,带有自己的 V8 实例
parent.js
const {fork} = require('child_process');
for(let i = 0; i < 3; i++){
const p = fork('./child.js', [JSON.stringify({id:1,name:1})]);
p.on('message', (msg) => {
console.log(`messsgae from child msg=${JSON.stringify(msg)}`, );
});
p.send({hello:`来自爸爸${process.pid} 进程id=${i}的问候`});
}
child.js
const t = JSON.parse(process.argv[2]);
console.error(`子进程 t=${JSON.stringify(t)}`);
process.send({hello:`儿子pid=${process.pid} 给爸爸进程pid=${process.ppid} 请安`});
process.on('message', (msg)=>{
console.error(`子进程 msg=${JSON.stringify(msg)}`);
});
输出结果:
image.png
- spawn 这个比较原生。上面3个底层都是调用这个spawn.