2 回答
TA贡献1909条经验 获得超7个赞
Node.js事件驱动和非阻塞I/O的特性,使其在高效处理I/O方面有较大优势。也正由于这些特性,Node在某些类型的业务处理上并不擅长。比如处理一个计算量较大的CPU密集型业务时,就可能会造成事件阻塞。这时可以使用child_process模块启动一个子进程来处理这一任务,从而释放事件循环。子进程查模块还可以用来执行一个外部命令(如:Linux命令、脚本等)。
在当前Node.js的版本(v0.12.4)中,child_process模块提供了4个异步方法可以用来创建子进程:exec、execFile、fork、spawn,这些方法中除fork方法外都提供了同步版本的方法。本文将结合一些应用场景介绍child_process模块的用户。
执行外部命令
创建子进程
从可执行程序启动子进程
运行Node模块
进程控制与中止
1. 执行外部命令:child_process.exec(command[, options], callback)
1.1 使用示例
执行外部命令可以使用exec方法,与spawn方法相比,exec方法更为便捷,exec提供一个回调函数,可以更方便的处理命令执行结果的。示例哪下:
var exec = require('child_process').exec;
exec('cat *.js bad_file | wc -l',
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error); //没有错误产生,所以本行无输出
}
});
在上面代码中,执行cat *.js bad_file | wc -l命令,用于统计当前目录下所有“.js”文件和名为“bad_file”文件的内容行数,由于“bad_file”文件不存在,因此会产生一个"stderr"。执行结果如下:
stdout: 548
stderr: cat: bad_file: No such fil
TA贡献1871条经验 获得超8个赞
nodejs是一种单线程模型,但是,使用nodejs的child_process模块可以实现多进程任务。利用child_process可以创建子进程,实现子进程和主进程之间的通信。
nodejs v0.12.7版本child_process提供以下同步和异步的方式创建进程:
异步创建:
child_process.spawn(command[, args][, options])
options.stdio
options.detached
options.customFds
child_process.exec(command[, options], callback)
child_process.execFile(file[, args][, options][callback])
child_process.fork(modulePath[, args][, options])
同步创建:
child_process.spawnSync(command[, args][, options])
child_process.execFileSync(command[, args][, options])
child_process.execSync(command[, options])
- 2 回答
- 0 关注
- 627 浏览
添加回答
举报