const {fork} = require('child_process'); let cp1 = fork('2.js', [], { cwd: process.cwd(), env: process.env, silent: false }); //接收消息 cp1.on('message', function (data) { console.log('父进程收到 : ', JSON.stringify(data)); process.exit(0); }); //发送消息 cp1.send({name: '你好子进程'});
2.js的代码:
process.on('message', function (data) { console.log('子进程收到 : ', JSON.stringify(data)); process.send({name: '你好父进程'}); });
3、通过exec() 创建子进程
exec() 可以开启一个子进程运行命令,并缓存子进程的输出结果。
const {exec} = require('child_process'); //参数一表示,要运行的命令 //参数二表示,配置选项 //参数三表示,进程终止时的回调 exec('dir', { //子进程的工作目录 cwd: process.cwd(), //子进程的环境变量 env: process.env, //输出的编码 encoding: 'utf8', //超时时间 timeout: 60 * 1000, //缓存stdout,stderr最大的字节数 maxBuffer: 1024 * 1024, //关闭子进程的信号 killSignal: 'SIGTERM' }, function (err, stdout, stderr) { console.log(stdout.toString()); });
4、通过 execFile() 创建子进程
使用 execFile() 开启一个运行可执行文件的子进程。
const {execFile} = require('child_process'); //参数一表示,可执行文件的名称或路径 //参数二表示,参数列表 //参数三表示,配置选项 //参数四表示,进程终止时的回调 let cp1 = execFile('node', ['3.js', '1', '2', '3'], { //子进程的工作目录 cwd: process.cwd(), //子进程的环境变量 env: process.env, //输出的编码 encoding: 'utf8', //超时时间 timeout: 60 * 1000, //缓存stdout,stderr最大的字节数 maxBuffer: 1024 * 1024, //关闭子进程的信号 killSignal: 'SIGTERM' }, function (err, stdout, stderr) { if (err) { console.log(err); process.exit(); } console.log('子进程的输出 : ', stdout.toString()); }); cp1.on('error', function (err) { console.log(err); });
3.js的代码:
process.argv.forEach(function (value) { process.stdout.write(value + '\r\n'); });
fork(),exec(),execFile() 都是基于 spawn() 的封装。