优雅地关闭http服务器

时间:2014-03-11 13:47:35

标签: node.js

我编写了一个http + websocket(socket.io)服务器,并捕获SIGINT来阻止它。

但我无法优雅地阻止它。例如:

在konsole窗口中,我输入: >

  

xxx~ $ npm start

     

info - socket.io开始

     

服务器起始于:80

     

新的网络套接字连接!

     

^ C ### PRESS CTRL + C HERE

     

xxx~ $ ^ C --- SIGINT RECIVED ---#< - WTF ?? !! (我已经被放到了外壳

     

xxx~ $ ps -f

UID        PID  PPID  C STIME TTY          TIME CMD
GongT    18776  2281  0 17:37 pts/11   00:00:00 /bin/bash
GongT    31365     1  0 21:24 pts/11   00:00:00 node main.js
GongT    31548 18776  0 21:24 pts/11   00:00:00 ps -f
                 # ^ look at PPID of node process
     

xxx~ $ kill -SIGINT 31365

     

---已收到SIGINT ---

     

xxx~ $ kill -SIGINT 31365

     

---已收到SIGINT ---

     

xxx~ $#now我从客户端(网络浏览器)断开连接

     

服务器已停止。再见〜

我的信号处理程序:

process.on('SIGINT', function (){
    console.log(' --- SIGINT RECIVED --- ');
    if(isServerRunning){
        server.close();
        isServerRunning = false;
        setInterval(function(){
            if(checkEveryThingFinished()){
                console.log('server stopped. bye~');
                process.exit();
            }
        });
    }
});

我的问题是:

为什么我在没有结束过程的情况下被抛弃到shell,以及如何防止这种情况?

(只等到process.exit()

0 个答案:

没有答案