首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优雅地退出node.js

优雅地退出node.js
EN

Stack Overflow用户
提问于 2011-08-05 23:29:01
回答 3查看 59.3K关注 0票数 80

我正在阅读优秀的在线书籍http://nodebeginner.org/,并尝试简单的代码

代码语言:javascript
复制
var http = require("http");

function onRequest(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}

http.createServer(onRequest).listen(8888); 

现在我不知道了(我仍然不知道!)如何优雅地关闭node.js,所以我选择了ctrl+z。现在,每次我尝试运行node server.js时,我都会收到以下错误消息。

代码语言:javascript
复制
node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: EADDRINUSE, Address already in use
    at Server._doListen (net.js:1100:5)
    at net.js:1071:14
    at Object.lookup (dns.js:153:45)
    at Server.listen (net.js:1065:20)
    at Object.<anonymous> (/Users/Bob/server.js:7:4)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)
    at Array.<anonymous> (module.js:421:10)

所以,有两个问题:

1)如何正常关闭node.js?

2)如何修复我造成的混乱?

EN

回答 3

Stack Overflow用户

发布于 2012-02-16 02:50:12

我目前使用Node的事件系统来响应信号。下面是我如何在程序中使用Ctrl-C (SIGINT)信号:

代码语言:javascript
复制
process.on( 'SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit( );
})

出现“Address in Use”错误是因为Ctrl-Z不会终止程序;它只是暂停类unix操作系统上的进程,而您放在后台的node程序仍然绑定到该端口。

在类Unix系统上,Control+Z是暂停进程(.3)的键序列的最常见的默认键盘映射。当用户在其计算机终端输入时,当前运行的前台进程被发送信号its信号,该信号通常导致进程暂停其执行。用户稍后可以通过键入命令'fg‘(前台的缩写)或键入'bg’(后台的缩写)以及进一步键入命令'disown‘来继续进程执行,以将后台进程与终端分开。1

您需要通过执行kill <pid>或‘kill -9 node’或类似操作来杀死您的进程。

票数 127
EN

Stack Overflow用户

发布于 2012-05-23 07:14:17

由于node.js是事件驱动的运行时,最合适的退出方式是耗尽挂起的事件队列。当事件队列为空时,该过程将结束。您可以通过执行一些操作来确保事件队列被排空,例如清除设置的任何间隔计时器,以及关闭任何具有打开的套接字连接的服务器。在使用第三方模块时,这会变得更加棘手,因为模块作者是否小心地清除了它创建的挂起事件,这取决于模块的作者。这可能不是退出node.js进程的最实用的方法,因为您将花费大量精力来跟踪“泄漏”的未决事件,但我认为这是最优雅的方法。

票数 22
EN

Stack Overflow用户

发布于 2013-02-15 06:58:25

1)如何正常关闭node.js?

侦听SIGINT信号。在Windows上,您需要使用readline模块监听ctrl-c。

我已经编写了自己的解决方案来提供应用程序的正常关闭和域的使用:grace。值得一看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6958780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档