关于nodejs守护进程的另一个简单实现

时间:2012-02-22 浏览:34次 来源:本站

//以下代码用于维持进程,当子进程退出时,5秒后自动重新开启进程。

if(process.argv.length>1) {//这个if肯定会成立,其作用是为了把内部的变量的作用范围和外部分离开来,避免冲突

  var newArgv = [];//

  var ifChild = false;

  process.argv.forEach(function (val, index, array) {

    if(val=='run_in_child') {

      ifChild = true;

    }

    else if(index>0)newArgv.push(val);//第0个元素是命令/程序路径

  });

  if(!ifChild) {

    newArgv.push('run_in_child');//子进程需要一个命令标志:run_in_child

    start();

    function start()

    {

      //console.dir(newArgv);

      console.log('master process is running.');

      var cp = require('child_process').spawn(process.argv[0], newArgv);

      cp.stdout.pipe(process.stdout);

      cp.stderr.pipe(process.stderr);

      cp.on('exit', function (code)

      {

        //可以在此添加进程意外退出的处理逻辑

        delete(cp);

        console.log('child process exited with code ' + code);

        setTimeout(start,5000);//5秒钟以后重启进程

      });

    }

    return;

  }

}

//维持进程代码结束

原文地址: http://yoyo.play175.com