我有一个使用connect在node.js中运行的简单服务器:
var server = require('connect').createServer(); //actions... server.listen(3000);
在我的代码中,我有实际的处理程序,但这就是基本思想。我一直遇到的问题是
EADDRINUSE, Address already in use
在先前崩溃或错误后再次运行我的应用程序时,我收到此错误。由于我没有打开终端的新实例,因此我用关闭了该过程ctr + z。
ctr + z
我可以肯定,我要做的就是关闭服务器或连接。我打过电话server.close()的process.on('exit', ...);,没有运气。
server.close()
process.on('exit', ...);
process.on('exit', ..)如果进程崩溃或被杀死,则不会调用。它只能被称为当事件循环结束,而且由于server.close() 某种 目的的事件循环(它仍必须等待目前跑这里堆有),这是没有意义的把该退出事件中…
process.on('exit', ..)
崩溃时,执行process.on('uncaughtException', ..)并杀死时执行process.on('SIGTERM', ..)
process.on('uncaughtException', ..)
process.on('SIGTERM', ..)
话虽如此,SIGTERM(默认终止信号)可以清除应用程序,而SIGKILL(立即终止)则不允许应用程序执行任何操作。