最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解nodejs中的process進(jìn)程

 更新時(shí)間:2017年03月19日 16:32:11   作者:wwwjiahuan  
這篇文章主要介紹了nodejs中的process進(jìn)程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下

雖然node對操作系統(tǒng)做了很多抽象的工作,但是你還是可以直接和他交互,比如和系統(tǒng)中已經(jīng)存在的進(jìn)程進(jìn)行交互,創(chuàng)建工作子進(jìn)程。node是一個(gè)用于事件循環(huán)的線程,但是你可以在這個(gè)事件循環(huán)之外創(chuàng)建其他的進(jìn)程(線程)參與工作。

  進(jìn)程模塊

  process模塊允許你獲得或者修改當(dāng)前node進(jìn)程的設(shè)置,不想其他的模塊,process是一個(gè)全局進(jìn)程(node主進(jìn)程),你可以直接通過process變量直接訪問它。

  process實(shí)現(xiàn)了EventEmitter接口,exit方法會在當(dāng)進(jìn)程退出的時(shí)候執(zhí)行。因?yàn)檫M(jìn)程退出之后將不再執(zhí)行事件循環(huán),所有只有那些沒有回調(diào)函數(shù)的代碼才會被執(zhí)行。在下面例子中,setTimeout里面的語句是沒有辦法執(zhí)行到的。

process.on('exit', function () {
  setTimeout(function () {
    console.log('This will not run');
  }, 100);
  console.log('Bye.');
});

  在你接觸node之后,你就會發(fā)現(xiàn)那些影響了主事件循環(huán)的異常會把整個(gè)node進(jìn)程宕掉的。這會是相當(dāng)嚴(yán)重的問題,所以process提供了另外一個(gè)有用的事件uncaughtException來解決這個(gè)問題,他會把異常抓取出來供你處理。

process.on('uncaughtException', function (err) {
  console.log('Caught exception: ' + err);
});
setTimeout(function () {
  console.log('This will still run.');
}, 500);
// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');

   我們來看上面的例子,我們注冊了uncaughtException事件來捕捉系統(tǒng)異常。執(zhí)行到nonexistentFunc()時(shí),因?yàn)樵摵瘮?shù)沒有定義所以會拋出異常。因?yàn)閖avascript是解釋性的語言,nonexistentFunc()方法上面的語句不會被影響到,他下面的語句不會被執(zhí)行。所以他的執(zhí)行結(jié)果如下:

Caught exception: ReferenceError: nonexistentFunc is not defined

This will still run.

  我們再看一個(gè)例子。

var http = require('http');
var server = http.createServer(function(req,res) {
  res.writeHead(200, {});
  res.end('response');
  badLoggingCall('sent response');
  console.log('sent response');
});
process.on('uncaughtException', function(e) {
  console.log(e);
});
server.listen(8080);

   在這里例子中我們創(chuàng)建了一個(gè)web服務(wù)器,當(dāng)處理完請求之后,我們會執(zhí)行badLoggingCall()方法。因?yàn)檫@個(gè)方法不存在,所以會有異常拋出。但是我們注冊的uncaughtException事件會對異常做出處理,這樣服務(wù)器不會受到影響得以繼續(xù)運(yùn)行。我們會在服務(wù)器端記錄錯(cuò)誤日志。

[ReferenceError: badLoggingCall is not defined] 

   與當(dāng)前進(jìn)程交互

  node提供了一些process的屬性,如下:

process.version:包含當(dāng)前node實(shí)例的版本號;

process.installPrefix:包含安裝路徑;

process.platform:列舉node運(yùn)行的操作系統(tǒng)的環(huán)境,只會顯示內(nèi)核相關(guān)的信息,如:linux2, darwin,而不是“Redhat ES3” ,“Windows 7”,“OSX 10.7”等;

process.uptime():包含當(dāng)前進(jìn)程運(yùn)行的時(shí)長(秒);

process.getgid(), process.setgid():獲取或者設(shè)置group id;

process.getuid(), process.setuid():獲取或者設(shè)計(jì)user id;

process.pid:獲取進(jìn)程id;

process.title:設(shè)置進(jìn)程名稱;

process.execPath:當(dāng)前node進(jìn)程的執(zhí)行路徑,如:/usr/local/bin/node;

process.cwd():當(dāng)前工作目錄;

process.memoryUsage():node進(jìn)程內(nèi)存的使用情況,rss代表ram的使用情況,vsize代表總內(nèi)存的使用大小,包括ram和swap;

process.heapTotal,process.heapUsed:分別代表v8引擎內(nèi)存分配和正在使用的大小。

   事件循環(huán)和ticker

  node中提供了process.nextTick()方法,允許你訪問事件循環(huán)和延時(shí)那你的工作。他有點(diǎn)類似于setTimeout(),他會在下次tick的時(shí)候執(zhí)行,而且每隔一段事件就會執(zhí)行一次。我們這里有個(gè)例子:

var http = require('http');
var s = http.createServer(function(req, res) {
  res.writeHead(200, {});
  res.end('foo');
  console.log('http response');
  process.nextTick(function(){console.log('tick')});
});
s.listen(8000);

  當(dāng)請求來的時(shí)候,會記錄日志‘http response'和‘tick',當(dāng)沒有請求的時(shí)候,每隔一段事件會執(zhí)行事件循環(huán),會輸出tick。

  此外,nextTick創(chuàng)建的回調(diào)函數(shù)具有隔離性,他們之間不會相互影響。

process.on('uncaughtException', function(e) {
  console.log(e);
});
process.nextTick(function() {
  console.log('tick');
});
process.nextTick(function() {
  iAmAMistake();
  console.log('tock');
});
process.nextTick(function() {
  console.log('tick tock');
});
console.log('End of 1st loop');

  在這個(gè)例子中,首先輸出‘End of 1st loop',然后順序的輸出nextTick的回調(diào)函數(shù),第一個(gè)會正常輸出‘tick',第二個(gè)是一個(gè)故意設(shè)置的異常會輸出異常信息,不會輸出‘tock',因?yàn)閚extTick回調(diào)函數(shù)的隔離性,第三個(gè)任然會輸出‘tick tock'。結(jié)果如下:

End of 1st loop
tick
[ReferenceError: iAmAMistake is not defined]
tick tock

  子進(jìn)程

  node提供了child_process模塊,允許你為主進(jìn)程創(chuàng)建子進(jìn)程,這樣你就可以使用更多的服務(wù)器資源,使用更多的cpu,這些概念在前面的章節(jié)有介紹。node提供了child_process. spawn()和child_process. exec()為你實(shí)現(xiàn)這一功能,下面我們就單獨(dú)介紹。

  child_process.exec( )

  我們來看exec的一個(gè)簡單例子,他創(chuàng)建了一個(gè)子進(jìn)程,第一個(gè)參數(shù)是一個(gè)shell命令,第二個(gè)參數(shù)是回調(diào)函數(shù),處理返回結(jié)果。

var cp = require('child_process');
cp.exec('ls -l', function(e, stdout, stderr) {
  if(!e) {
    console.log(stdout);
    console.log(stderr);
  }
});

exec()還可以傳options的參數(shù):

var options = { 
 encoding: 'utf8',
 timeout: 0,
 maxBuffer: 200 * 1024,
 killSignal: 'SIGTERM',
 setsid: false,
 cwd: null,
 env: null 
};
var cp = require('child_process');
cp.exec('ls -l', options, function(e, stdout, stderr) {
  if(!e) {
    console.log(stdout);
    console.log(stderr);
  }
});

encoding:I/O流的編碼格式;

timeout:進(jìn)程超時(shí)時(shí)間;

killSignal:當(dāng)時(shí)間或者緩沖區(qū)超限時(shí)終止進(jìn)程的信號;

maxBuffer:stdout或stderr可增長的最大值;

setsid:決定在進(jìn)程中是否創(chuàng)建一個(gè)新的會話;

cwd:進(jìn)程的初始工作目錄,為null時(shí)表示使用node的當(dāng)前工作目錄;

env:進(jìn)程的環(huán)境變量。

  child_process.spawn( )

  child_process.spawn( )比child_process.exec( )更加強(qiáng)大和靈活,例子如下:

var cp = require('child_process');
var cat = cp.spawn('cat');
cat.stdout.on('data', function(d) {
  console.log(d.toString());
});
cat.on('exit', function() {
  console.log('kthxbai');
});
cat.stdin.write('meow');
cat.stdin.end();

以上所述是小編給大家介紹的nodejs中的process進(jìn)程,希望對大家有所幫助!

相關(guān)文章

  • Node.JS中的模塊、exports和module講解

    Node.JS中的模塊、exports和module講解

    這篇文章主要介紹了Node.JS中的模塊、exports和module講解,模塊分為兩類一類是核心模塊一類是文件模塊,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • node跨域轉(zhuǎn)發(fā) express+http-proxy-middleware的使用

    node跨域轉(zhuǎn)發(fā) express+http-proxy-middleware的使用

    這篇文章主要介紹了node跨域轉(zhuǎn)發(fā) express+http-proxy-middleware的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • node內(nèi)存泄漏排查與修復(fù)過程

    node內(nèi)存泄漏排查與修復(fù)過程

    之前開發(fā)了一個(gè)node接口,該接口使用canvas繪制產(chǎn)品圖提供給java端使用,在運(yùn)行了一段時(shí)間后發(fā)現(xiàn)了內(nèi)存泄漏問題,本文淺記下修復(fù)過程,文章通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • win7下安裝配置node.js+express開發(fā)環(huán)境

    win7下安裝配置node.js+express開發(fā)環(huán)境

    windows7下安裝nodejs及框架express,從誕生至今一直被熱捧,筆者最近也裝了個(gè)環(huán)境打算了解一下。安裝步驟簡單比較簡單,這里分享給大家,希望大家能夠喜歡。
    2015-12-12
  • Node.js的文件權(quán)限及讀寫flag詳解

    Node.js的文件權(quán)限及讀寫flag詳解

    Node.js對文件的讀寫還是相當(dāng)靈活的,因?yàn)樽约豪鲜怯洸蛔∥募蚰夸洐?quán)限的數(shù)值表達(dá)和字符表達(dá)。所以整理出這篇文章,方便以后查閱,下面來一起看看吧。
    2016-10-10
  • node.js 開發(fā)指南 – Node.js 連接 MySQL 并進(jìn)行數(shù)據(jù)庫操作

    node.js 開發(fā)指南 – Node.js 連接 MySQL 并進(jìn)行數(shù)據(jù)庫操作

    通常在NodeJS開發(fā)中我們經(jīng)常涉及到操作數(shù)據(jù)庫,尤其是 MySQL ,作為應(yīng)用最為廣泛的開源數(shù)據(jù)庫則成為我們的首選,本篇就來介紹下如何通過NodeJS來操作 MySQL 數(shù)據(jù)庫。
    2014-07-07
  • 基于node編寫excel讀取和導(dǎo)出的小工具

    基于node編寫excel讀取和導(dǎo)出的小工具

    這篇文章主要為大家詳細(xì)介紹了如何基于node編寫一個(gè)小工具,可以實(shí)現(xiàn)excel讀取和導(dǎo)出,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-11-11
  • 詳解一個(gè)基于套接字實(shí)現(xiàn)長連接的express

    詳解一個(gè)基于套接字實(shí)現(xiàn)長連接的express

    這篇文章主要介紹了詳解一個(gè)基于套接字實(shí)現(xiàn)長連接的express,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • nodejs判斷文件、文件夾是否存在及刪除的方法

    nodejs判斷文件、文件夾是否存在及刪除的方法

    這篇文章主要介紹了nodejs判斷文件、文件夾是否存在及刪除的方法,結(jié)合實(shí)例形式分析了nodejs基于文件模塊針對文件與文件夾的存在判斷、刪除等操作技巧,需要的朋友可以參考下
    2017-11-11
  • Node中node_modules文件夾及package.json文件的作用說明

    Node中node_modules文件夾及package.json文件的作用說明

    這篇文章主要介紹了Node中node_modules文件夾及package.json文件的作用說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

乌海市| 灌云县| 印江| 蒲江县| 正安县| 岳阳县| 隆回县| 中阳县| 拉萨市| 永清县| 贵阳市| 湖南省| 兴安县| 汉川市| 大姚县| 和顺县| 赣榆县| 高要市| 个旧市| 孝义市| 甘孜| 鄂伦春自治旗| 东阿县| 望都县| 五莲县| 普兰店市| 罗甸县| 离岛区| 察雅县| 九龙县| 新河县| 山西省| 溧阳市| 绥滨县| 鹤壁市| 凤冈县| 黑龙江省| 上虞市| 陇川县| 镇安县| 本溪|