我正在阅读优秀的在线书籍http://nodebeginner.org/并尝试使用简单的代码
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);
Run Code Online (Sandbox Code Playgroud)
现在我不知道(我仍然不知道!)如何优雅地关闭node.js,所以我就去了ctrl+z.现在,每次我尝试运行时node server.js,都会收到以下错误消息.
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)
Run Code Online (Sandbox Code Playgroud)
那么,有两个问题:
1)如何正常关闭node.js?
2)如何修复我创造的混乱?
Ehe*_*Tov 126
我目前使用Node的事件系统来响应信号.以下是我在程序中使用Ctrl-C(SIGINT)信号的方法:
process.on( 'SIGINT', function() {
console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
// some other closing procedures go here
process.exit( );
})
Run Code Online (Sandbox Code Playgroud)
您收到了"正在使用的地址"错误,因为Ctrl-Z不会终止程序; 它只是在类似unix的操作系统上挂起进程,你放在后台的节点程序仍然绑定到该端口.
在类Unix系统上,[Control + Z]是挂起进程的密钥序列(SIGTSTP)最常见的默认键盘映射.[3] 当用户在其计算机终端输入时,向当前运行的前台进程发送SIGTSTP信号,这通常导致进程暂停其执行.用户可以稍后通过键入命令'fg'(前景的缩写)或键入'bg'(背景的缩写)并再键入命令'disown'以将后台进程与终端分开来继续执行流程.1
您需要通过执行kill <pid>或"killall -9节点"等来终止您的进程.
小智 52
使用Ctrl+ C可以正常退出节点进程
清理混乱取决于您的平台,但基本上您需要找到节点运行的进程的剩余部分并将其终止.
例如,在Unix上:ps -ax | grep node将为您提供如下条目:
1039 ttys000 0:00.11 node index.js
Run Code Online (Sandbox Code Playgroud)
index.js您的节点文件的名称在哪里.
在这个例子中,1039是进程id(你的将是不同的),所以kill -9 1039将结束它,你将能够再次绑定到端口.
jki*_*ens 22
由于node.js是一个事件驱动的运行时,最优雅的退出是耗尽挂起事件的队列.当事件队列为空时,该过程将结束.您可以通过执行诸如清除所设置的任何间隔计时器以及关闭具有打开套接字连接的任何服务器等操作来确保事件队列耗尽.使用第三方模块时会变得更加棘手,因为您无论模块作者是否已经注意优雅地消耗它创建的待处理事件,您都会受到怜悯.这可能不是退出node.js进程的最实用的方法,因为您将花费大量精力来追踪"泄露"的待处理事件,但我认为这是最优雅的.
输入任一个
process.exit()
Run Code Online (Sandbox Code Playgroud)
要么
.exit
Run Code Online (Sandbox Code Playgroud)
node优雅地退出
点击Control+ C两次将强制退出.
| 归档时间: |
|
| 查看次数: |
53812 次 |
| 最近记录: |