我编写了一个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()
)