利用NodeJS的子進(jìn)程(child_process)調(diào)用系統(tǒng)命令的方法分享
更新時(shí)間:2013年06月05日 12:52:59 作者:
child_process即子進(jìn)程可以創(chuàng)建一個(gè)系統(tǒng)子進(jìn)程并執(zhí)行shell命令,在與系統(tǒng)層面的交互上挺有用處
NodeJS子進(jìn)程簡(jiǎn)介 NodeJS子進(jìn)程提供了與系統(tǒng)交互的重要接口,其主要API有: 標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出及標(biāo)準(zhǔn)錯(cuò)誤輸出的接口。
NodeJS子進(jìn)程簡(jiǎn)介
NodeJS 子進(jìn)程提供了與系統(tǒng)交互的重要接口,其主要 API 有:
標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出及標(biāo)準(zhǔn)錯(cuò)誤輸出的接口
child.stdin 獲取標(biāo)準(zhǔn)輸入
child.stdout 獲取標(biāo)準(zhǔn)輸出
child.stderr 獲取標(biāo)準(zhǔn)錯(cuò)誤輸出
獲取子進(jìn)程的PID:child.pid
提供生成子進(jìn)程的重要方法:child_process.spawn(cmd, args=[], [options])
提供直接執(zhí)行系統(tǒng)命令的重要方法:child_process.exec(cmd, [options], callback)
提供殺死進(jìn)程的方法:child.kill(signal='SIGTERM')
實(shí)例一:利用子進(jìn)程獲取系統(tǒng)內(nèi)存使用情況
將以下代碼保存為 free.js:
var spawn = require('child_process').spawn,
free = spawn('free', ['-m']);
// 捕獲標(biāo)準(zhǔn)輸出并將其打印到控制臺(tái)
free.stdout.on('data', function (data) {
console.log('標(biāo)準(zhǔn)輸出:\n' + data);
});
// 捕獲標(biāo)準(zhǔn)錯(cuò)誤輸出并將其打印到控制臺(tái)
free.stderr.on('data', function (data) {
console.log('標(biāo)準(zhǔn)錯(cuò)誤輸出:\n' + data);
});
// 注冊(cè)子進(jìn)程關(guān)閉事件
free.on('exit', function (code, signal) {
console.log('子進(jìn)程已退出,代碼:' + code);
});
執(zhí)行代碼后的結(jié)果:
$ node free.js
標(biāo)準(zhǔn)輸出:
total used free shared buffers cached
Mem: 3949 1974 1974 0 135 959
-/+ buffers/cache: 879 3070
Swap: 3905 0 3905
子進(jìn)程已退出,代碼:0
以上輸出相當(dāng)與在命令行執(zhí)行:free -m 命令。
通過(guò)這個(gè)簡(jiǎn)單的例子我們已經(jīng)對(duì)子進(jìn)程的使用有所了解,下面再來(lái)一個(gè)示例,用于演示exec 的使用方法。
實(shí)例二:利用子進(jìn)程統(tǒng)計(jì)系統(tǒng)登錄次數(shù)
將下面代碼保存為 last.js
var exec = require('child_process').exec,
last = exec('last | wc -l');
last.stdout.on('data', function (data) {
console.log('標(biāo)準(zhǔn)輸出:' + data);
});
last.on('exit', function (code) {
console.log('子進(jìn)程已關(guān)閉,代碼:' + code);
});
執(zhí)行代碼:
$ node last.js
標(biāo)準(zhǔn)輸出:203
子進(jìn)程已關(guān)閉,代碼:0
其與直接在命令行輸入:last | wc -l 的結(jié)果是一樣的。
NodeJS子進(jìn)程簡(jiǎn)介
NodeJS 子進(jìn)程提供了與系統(tǒng)交互的重要接口,其主要 API 有:
標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出及標(biāo)準(zhǔn)錯(cuò)誤輸出的接口
child.stdin 獲取標(biāo)準(zhǔn)輸入
child.stdout 獲取標(biāo)準(zhǔn)輸出
child.stderr 獲取標(biāo)準(zhǔn)錯(cuò)誤輸出
獲取子進(jìn)程的PID:child.pid
提供生成子進(jìn)程的重要方法:child_process.spawn(cmd, args=[], [options])
提供直接執(zhí)行系統(tǒng)命令的重要方法:child_process.exec(cmd, [options], callback)
提供殺死進(jìn)程的方法:child.kill(signal='SIGTERM')
實(shí)例一:利用子進(jìn)程獲取系統(tǒng)內(nèi)存使用情況
將以下代碼保存為 free.js:
復(fù)制代碼 代碼如下:
var spawn = require('child_process').spawn,
free = spawn('free', ['-m']);
// 捕獲標(biāo)準(zhǔn)輸出并將其打印到控制臺(tái)
free.stdout.on('data', function (data) {
console.log('標(biāo)準(zhǔn)輸出:\n' + data);
});
// 捕獲標(biāo)準(zhǔn)錯(cuò)誤輸出并將其打印到控制臺(tái)
free.stderr.on('data', function (data) {
console.log('標(biāo)準(zhǔn)錯(cuò)誤輸出:\n' + data);
});
// 注冊(cè)子進(jìn)程關(guān)閉事件
free.on('exit', function (code, signal) {
console.log('子進(jìn)程已退出,代碼:' + code);
});
執(zhí)行代碼后的結(jié)果:
$ node free.js
標(biāo)準(zhǔn)輸出:
total used free shared buffers cached
Mem: 3949 1974 1974 0 135 959
-/+ buffers/cache: 879 3070
Swap: 3905 0 3905
子進(jìn)程已退出,代碼:0
以上輸出相當(dāng)與在命令行執(zhí)行:free -m 命令。
通過(guò)這個(gè)簡(jiǎn)單的例子我們已經(jīng)對(duì)子進(jìn)程的使用有所了解,下面再來(lái)一個(gè)示例,用于演示exec 的使用方法。
實(shí)例二:利用子進(jìn)程統(tǒng)計(jì)系統(tǒng)登錄次數(shù)
將下面代碼保存為 last.js
復(fù)制代碼 代碼如下:
var exec = require('child_process').exec,
last = exec('last | wc -l');
last.stdout.on('data', function (data) {
console.log('標(biāo)準(zhǔn)輸出:' + data);
});
last.on('exit', function (code) {
console.log('子進(jìn)程已關(guān)閉,代碼:' + code);
});
執(zhí)行代碼:
$ node last.js
標(biāo)準(zhǔn)輸出:203
子進(jìn)程已關(guān)閉,代碼:0
其與直接在命令行輸入:last | wc -l 的結(jié)果是一樣的。
相關(guān)文章
JSON.parse 數(shù)據(jù)不完整的解決方法
本文主要介紹了JSON.parse 數(shù)據(jù)不完整的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON
這篇文章主要為大家介紹了寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON的詳細(xì)實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05詳解JSON1:使用TSQL查詢數(shù)據(jù)和更新JSON數(shù)據(jù)
這篇文章主要介紹了使用TSQL查詢數(shù)據(jù)和更新JSON數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11