天天看點

nodejs之child_process子程序子產品

child_process即子程序可以建立一個系統子程序并執行shell指令,在與系統層面的互動上挺有用處。

NodeJS 子程序提供了與系統互動的重要接口,其主要 API 有: 

  • 标準輸入、标準輸出及标準錯誤輸出的接口 
  • child.stdin 擷取标準輸入 
  • child.stdout 擷取标準輸出 
  • child.stderr 擷取标準錯誤輸出 
  • 擷取子程序的PID:child.pid 
  • 提供生成子程序的重要方法:child_process.spawn(cmd, args=[], [options]) 
  • 提供直接執行系統指令的重要方法:child_process.exec(cmd, [options], callback) 
  • 提供殺死程序的方法:child.kill(signal='SIGTERM') 

執行個體一:利用子程序擷取系統記憶體使用情況 

将以下代碼儲存為 free.js: 

var spawn = require('child_process').spawn, 
free = spawn('free', ['-m']); 


// 捕獲标準輸出并将其列印到控制台 
free.stdout.on('data', function (data) { 
console.log('标準輸出:\n' + data); 
}); 


// 捕獲标準錯誤輸出并将其列印到控制台 
free.stderr.on('data', function (data) { 
console.log('标準錯誤輸出:\n' + data); 
}); 


// 注冊子程序關閉事件 
free.on('exit', function (code, signal) { 
console.log('子程序已退出,代碼:' + code); 
}); 
           

執行代碼後的結果: 

$ node free.js 

标準輸出: 

total used free shared buffers cached 

Mem: 3949 1974 1974 0 135 959 

-/+ buffers/cache: 879 3070 

Swap: 3905 0 3905 

子程序已退出,代碼:0 

以上輸出相當與在指令行執行:free -m 指令。 

通過這個簡單的例子我們已經對子程序的使用有所了解,下面再來一個示例,用于示範exec 的使用方法。 

執行個體二:利用子程序統計系統登入次數 

将下面代碼儲存為 last.js 

var exec = require('child_process').exec, 
last = exec('last | wc -l'); 


last.stdout.on('data', function (data) { 
console.log('标準輸出:' + data); 
}); 


last.on('exit', function (code) { 
console.log('子程序已關閉,代碼:' + code); 
}); 
           

執行代碼: 

$ node last.js 

标準輸出:203 

子程序已關閉,代碼:0 

其與直接在指令行輸入:last | wc -l 的結果是一樣的。