1.通过stdin/stdout等传递
spawn('ls', ['-l'], {
stdio: 'inherit'
})
2.IPC
// 父进程
const cp = require('child_process');
const n = cp.fork(`${__dirname}/sub.js`);
n.on('message', (m) => {
console.log('父进程收到消息', m);
});
// 使子进程输出: 子进程收到消息 { hello: 'world' }
n.send({ hello: 'world' });
//子进程
process.on('message', (m) => {
console.log('子进程收到消息', m);
});
// 使父进程输出: 父进程收到消息 { foo: 'bar', baz: null }
process.send({ foo: 'bar', baz: NaN });
3.网络Sockets
借助网络完成进程通信,不仅能跨进程还能跨机器
// 父进程
const { spawn } = require('child_process');
const child = spawn('node', ['server/child'], {
stdio: [null, null, null, 'pipe'],
});
child.stdio[3].on('data', data => {
console.log('222', data.toString());
});
//子进程
const net = require('net');
const pipe = net.Socket({ fd: 3 });
pipe.write('killme');