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 關注
- 662 瀏覽
添加回答
舉報