2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個贊
Node.js事件驅(qū)動和非阻塞I/O的特性,使其在高效處理I/O方面有較大優(yōu)勢。也正由于這些特性,Node在某些類型的業(yè)務(wù)處理上并不擅長。比如處理一個計(jì)算量較大的CPU密集型業(yè)務(wù)時,就可能會造成事件阻塞。這時可以使用child_process模塊啟動一個子進(jìn)程來處理這一任務(wù),從而釋放事件循環(huán)。子進(jìn)程查模塊還可以用來執(zhí)行一個外部命令(如:Linux命令、腳本等)。
在當(dāng)前Node.js的版本(v0.12.4)中,child_process模塊提供了4個異步方法可以用來創(chuàng)建子進(jìn)程:exec、execFile、fork、spawn,這些方法中除fork方法外都提供了同步版本的方法。本文將結(jié)合一些應(yīng)用場景介紹child_process模塊的用戶。
執(zhí)行外部命令
創(chuàng)建子進(jìn)程
從可執(zhí)行程序啟動子進(jìn)程
運(yùn)行Node模塊
進(jìn)程控制與中止
1. 執(zhí)行外部命令:child_process.exec(command[, options], callback)
1.1 使用示例
執(zhí)行外部命令可以使用exec方法,與spawn方法相比,exec方法更為便捷,exec提供一個回調(diào)函數(shù),可以更方便的處理命令執(zhí)行結(jié)果的。示例哪下:
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); //沒有錯誤產(chǎn)生,所以本行無輸出
}
});
在上面代碼中,執(zhí)行cat *.js bad_file | wc -l命令,用于統(tǒng)計(jì)當(dāng)前目錄下所有“.js”文件和名為“bad_file”文件的內(nèi)容行數(shù),由于“bad_file”文件不存在,因此會產(chǎn)生一個"stderr"。執(zhí)行結(jié)果如下:
stdout: 548
stderr: cat: bad_file: No such fil

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊
nodejs是一種單線程模型,但是,使用nodejs的child_process模塊可以實(shí)現(xiàn)多進(jìn)程任務(wù)。利用child_process可以創(chuàng)建子進(jìn)程,實(shí)現(xiàn)子進(jìn)程和主進(jìn)程之間的通信。
nodejs v0.12.7版本child_process提供以下同步和異步的方式創(chuàng)建進(jìn)程:
異步創(chuàng)建:
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])
同步創(chuàng)建:
child_process.spawnSync(command[, args][, options])
child_process.execFileSync(command[, args][, options])
child_process.execSync(command[, options])
- 2 回答
- 0 關(guān)注
- 941 瀏覽
添加回答
舉報(bào)