首页 > 语言 > JavaScript > 正文

详解nodejs中的process进程

2024-05-06 15:19:40
字体:
来源:转载
供稿:网友

虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线程,但是你可以在这个事件循环之外创建其他的进程(线程)参与工作。

  进程模块

  process模块允许你获得或者修改当前node进程的设置,不想其他的模块,process是一个全局进程(node主进程),你可以直接通过process变量直接访问它。

  process实现了EventEmitter接口,exit方法会在当进程退出的时候执行。因为进程退出之后将不再执行事件循环,所有只有那些没有回调函数的代码才会被执行。在下面例子中,setTimeout里面的语句是没有办法执行到的。

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

  在你接触node之后,你就会发现那些影响了主事件循环的异常会把整个node进程宕掉的。这会是相当严重的问题,所以process提供了另外一个有用的事件uncaughtException来解决这个问题,他会把异常抓取出来供你处理。

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事件来捕捉系统异常。执行到nonexistentFunc()时,因为该函数没有定义所以会抛出异常。因为javascript是解释性的语言,nonexistentFunc()方法上面的语句不会被影响到,他下面的语句不会被执行。所以他的执行结果如下:

Caught exception: ReferenceError: nonexistentFunc is not defined

This will still run.

  我们再看一个例子。

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);

   在这里例子中我们创建了一个web服务器,当处理完请求之后,我们会执行badLoggingCall()方法。因为这个方法不存在,所以会有异常抛出。但是我们注册的uncaughtException事件会对异常做出处理,这样服务器不会受到影响得以继续运行。我们会在服务器端记录错误日志。

[ReferenceError: badLoggingCall is not defined] 

   与当前进程交互

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

process.version:包含当前node实例的版本号;

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选