日期:2014-05-16  浏览次数:20322 次

一起读nodejs(五)----进程(process)

    本文是对nodejs0.8.8版本的api开发手册解读.nodejs网址

    进程(process) 

    process对象是一个全局对象,它可以在任何地方被访问.它是一个EventEmitter对象的实例.

    Event:'exit'

    当一个进程即将退出时放出'exit'事件,这一个用来定时检查模块的状态的好钩子(hook)(例如单元测试),当主事件循环在执行完'exit'的回调函数后将不再执行,所以在exit事件中定义的定时器可能不会被加入事件列表.

    监听'exit'事件的例子:

process.on('exit', function () {
  process.nextTick(function () {
   console.log('This will not run');
  });
  console.log('About to exit.');
});

    

    Event:'uncaughtException'

    当一个异常冒泡循环一圈又回到node事件循环时放出'uncaughtException'.如果这个异常被添加了一个监听器,默认操作(打印堆栈信息并退出)将不会执行.

    监听'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是一个很低级的异常处理,在将来可能被移除.

    不要使用它,用domains代替(后面会讲),如果你非用不可,只好每次在程序发生异常之后重启.

    不要把它和'On Error Resume Next'一起用,因为一个未处理的异常意味着你的程序--甚至是node.js自己--在一个未定义的状态.盲目的恢复继续执行疑问这任何事都可能发生.

    想像一下,在你正在升级你的系统的时候拉扯主机电源线,十有八九可能什么都不会发生--但是第十次,你的系统会瘫痪.

    你已经被警告过了.


    信号事件(signal Events)

    当进程接受到一个信号时发出'singal'事件.可以使用sigaction(2)(linux系统下)查看标准的posix 信号命名列表,例如:SIGINT,SIGUSR1,等等.

    监听'signal'事件的例子:

// Start reading from stdin so we don't exit.
process.stdin.resume();

process.on('SIGINT', function () {
  console.log('Got SIGINT.  Press Control-D to exit.');
});
    一个简单的方式发送SIGINT信号的方法是:control-c,在大多是终端程序里.