Node.js几种创建子进程方法
exec
const { exec } = require('child_process')
exec('cat *.js bad_file | wc -l')
exec('cat *.js bad_file | wc -l', (err, stdout, stderr) => {
console.log(stdout)
})
execFile
child_process.execFile(file[, args][, options][, callback])
const { execFile } = require('child_process')
execFile('node', ['--version'], (err, stdout, stderr) => {
console.log(stdout)
})
fork
child_process.fork(modulePath[, args][, options])
silent
parent.js
const { fork } = require('child_process')
const fd = fork('./sub.js')
fd.stdout.on('data', data => console.log(data))
sub.js
console.log('this is sub process')
child_process.spawn(command[, args][, options])
父子进程间的通讯
ignore - 等同于 [ignore, ignore, ignore]
inherit - 等同于 [process.stdin, process.stdout, process.stderr] 或 [0,1,2]
const { spawn } = require('child_process');
// 子进程使用父进程的 stdios
spawn('prg', [], { stdio: 'inherit' });
// 衍生的子进程只共享 stderr
spawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });
// 打开一个额外的 fd=4,用于与程序交互
spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
评论