【问题标题】:nodejs forever-monitor not killing fork processesnodejs永远监控不杀死fork进程
【发布时间】:2017-03-11 17:17:34
【问题描述】:

我正在 nodejs 中设置一个应用程序,它由一个主进程 (api.js) 和另一个从这个进程派生的 (使用 .fork() ) 组成

此外,我还有永远的监控器,以保证在发生任何事情时一切都在运行。

当主应用程序中发生某些事情时,问题就来了,永远是行为,重新产生它。但它不会杀死辅助分叉线程。

所以在模拟错误一段时间后,ps aux 中的进程堆栈在没有任何控制的情况下变得越来越大。

我正在使用 killTree 参数,但没有任何运气。

有什么帮助吗??

【问题讨论】:

    标签: javascript node.js forever


    【解决方案1】:

    forever-monitor 在分离的子状态下启动子进程,因此这是预期的行为。您的自定义永远监视器脚本必须处理来自您正在使用的任何信号的信号并适当地操纵子进程。

    参考这篇文章:https://github.com/foreverjs/forever-monitor/issues/5

    var forever = require('forever-monitor');
    process.stdin.resume();
    
    var child = new(forever.Monitor)('Index.js', {
        max: 5,
        silent: false,
        minUptime: 2000,
        spinSleepTime: 5000
    });
    
    child.on('start', function() {
        console.log('Forever started for first time.');
    });
    
    child.on('exit', function() {
        console.error('Index.js file has exited after '+child.max+' restarts');
    });
    
    //Exit handler.
    function exitHandler(options, err) {
        try{
            //Killing node process manually that is running "Index.js" file.
            process.kill(child.childData.pid);
            console.log("Child process killed succesfully!!");
            console.log("Forever exit!!");
        }
        catch(err){
            console.log("Child process already stopped!!");
            console.log("Forever exit!!");
        }
    
        //Killing forever process.
        process.exit();
    }
    
    //Handling user exit events like Ctrl+C.
    process.on('SIGINT', exitHandler.bind(null, {exit: true}));    
    
    child.start();
    

    【讨论】:

      猜你喜欢
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多