首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果正在进行Node.js解析,则DNS进程在登录时挂起

如果正在进行Node.js解析,则DNS进程在登录时挂起
EN

Stack Overflow用户
提问于 2015-04-12 07:41:14
回答 1查看 211关注 0票数 0

我在Linux上使用的是node 10.38 (Ubuntu4.10、FC20等)。

我在启动中有一些代码,看起来像这样:

代码语言:javascript
复制
process.on('SIGTERM', function() {
  process.exit(1);
});

process.on('SIGINT', function() {
  process.exit(1);
});

在这个过程中的其他地方,我有这样的代码:

代码语言:javascript
复制
dns.lookup("somehostname", function(err, addresses, family) {
    // do something
});

很多时候,如果您向进程发送SIGTERM,节点将不会退出。它将在解析DNS所需的时间内挂起。有时,如果DNS服务器没有响应,它可能需要5分钟才能退出。如果此时使用GDB堆栈跟踪,您会看到类似下面这样的堆栈跟踪。如果您附加了一个gdb调试器,您将看到它在尝试解析我们正在尝试解析的主机名时卡住了。

我本以为gethostbyname可以被信号中断。有没有人能深入了解一下呢?

代码语言:javascript
复制
Thread 3 (process 18074):
#0  0x00007fabac3bed26 in poll () from /lib64/libc.so.6
No symbol table info available.
#1  0x00007fababcdce90 in __libc_res_nsend () from /lib64/libresolv.so.2
No symbol table info available.
#2  0x00007fababcdbcb6 in __libc_res_nquery () from /lib64/libresolv.so.2
No symbol table info available.
#3  0x00007fababcdbf27 in __libc_res_nquerydomain () from /lib64/libresolv.so.2
No symbol table info available.
#4  0x00007fababcdc14b in __libc_res_nsearch () from /lib64/libresolv.so.2
No symbol table info available.
#5  0x00007fababeeb8ef in _nss_dns_gethostbyname3_r () from 
/lib64/libnss_dns.so.2
No symbol table info available.
#6  0x00007fababeebb64 in _nss_dns_gethostbyname2_r () from 
/lib64/libnss_dns.so.2
No symbol table info available.
#7  0x00007fabac3b02bf in gaih_inet () from /lib64/libc.so.6
No symbol table info available.
#8  0x00007fabac3b178e in getaddrinfo () from /lib64/libc.so.6
No symbol table info available.
#9  0x0000000000a0cbb2 in uv_getaddrinfo ()
No symbol table info available.
#10 0x0000000000a127c4 in uv_queue_work ()
No symbol table info available.
#11 0x0000000000a08462 in uv_thread_create ()
No symbol table info available.
EN

回答 1

Stack Overflow用户

发布于 2015-04-14 23:27:21

gethostbyname确实可以被信号中断,但您将在堆栈跟踪的底部看到调用是在线程内进行的。

您发送的SIGTERM只被传递给主程序,由于我还没有确定的原因,直到所有线程都完成了它们的工作,进程才会退出。

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

https://stackoverflow.com/questions/29584311

复制
相关文章

相似问题

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