1. spawn 創建新進程,執行結果已流的形式返回,只能通過事件來獲取結果數據,操作麻煩
const spawn = require('child_process').spawn; const ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data', (data) => { console.log(`stderr: ${data}`); }); ls.on('close', (code) => { console.log(`child process exited with code ${code}`); });
2. execFile 創建新進程,按照其后面的File名字,執行一個可執行文件,可以帶選項,以回調形式返回調用結果,可以得到完整數據,方便了很多
execFile('node', ['--version'], function(error, stdout, stderr){ if(error){ throw error; } console.log(stdout); });
3. exec 創建新進程,可以直接執行shell命令,簡化了shell命令執行方式,同樣以回調方式返回
exec('ls -al', function(error, stdout, stderr){ if(error) { console.error('error: ' + error); return; } console.log('stdout: ' + stdout); console.log('stderr: ' + typeof stderr); });
4. fork 創建新進程,執行node程序
var child = child_process.fork('./anotherSilentChild.js', { silent: true }); child.stdout.setEncoding('utf8'); child.stdout.on('data', function(data){ console.log(data); });
其中,spawn是所有方法的基礎,exec底層是調用了execFile,它們的調用關系如下: