- 每一个程序都会开启一个进程
- 进程是 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_processconst exec1 = util.promisify(exec)exec1('"C:\\Program\ Files\ (x86)\\Google\\Chrome\\Application\\chrome.exe"').then((data)=>{console.log(data.stdout)})//用户如果用 ; 或者 && 符号将语句隔开 就可以注入新的命令比较危险// 所以exec尽量不用 改为execFileconst 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_processconst userInput = ".";execFile("ls",["-la",userInput],{cwd:"C:\\",env:{NODE_ENV:'development'}},(error,stdout)=>{console.log(error)console.log(stdout)})
