- 每一个程序都会开启一个进程
- 进程是 chrome.exe 程序的一个执行实例
- 进程下面会开多个线程
child_process.exec(command[, options][, callback])
=> execSync 同步版本
const child_process = require('child_process')
child_process.exec('"C:\\Program\ Files\ (x86)\\Google\\Chrome\\Application\\chrome.exe"',(error,stdout,stderr)=>{ // 错误 //标准输出 // 错误信息 windows下需要用\转义一下
console.log(error)
console.log(stdout)
console.log(stderr)
})
=> 也可以返回一个流
const stream = child_process.exec('ls' ./)
stream.stdout.on('data',(chunk)=>{console.log(chunk)})
//改写成Promise的形式
const util = require('util')
const child_process = require('child_process')
const {exec} = child_process
const exec1 = util.promisify(exec)
exec1('"C:\\Program\ Files\ (x86)\\Google\\Chrome\\Application\\chrome.exe"')
.then((data)=>{console.log(data.stdout)})
//用户如果用 ; 或者 && 符号将语句隔开 就可以注入新的命令比较危险
// 所以exec尽量不用 改为execFile
const userInput = '. && rm -rf /' // ' ; rm -rf /'
exec1(`ls ${userInput}`).then(()=>{console.log()})
child_process.execFile(file[, args][, options][, callback])
只能以数组的方式传入,不能注入,支持流
const child_process = require('child_process')
const {execFile} = child_process
const userInput = ".";
execFile("ls",["-la",userInput],{
cwd:"C:\\",
env:{NODE_ENV:'development'}
},(error,stdout)=>{
console.log(error)
console.log(stdout)
})