【问题标题】:How to know what keeps a node process from stopping?如何知道是什么阻止了节点进程停止?
【发布时间】:2012-03-27 21:29:32
【问题描述】:

我有一个非常复杂的脚本,它打开套接字、HTTP 服务器、读取/写入文件、设置超时等。达到某些条件后,所有这些都应该停止 - 我正在清除所有超时,关闭所有服务器和很快。

但有时该过程会很好地停止,有时它只是一直在等待某些事情发生。我可以杀死节点进程,但我想找出导致该行为的原因,修复它并让进程自行停止。是否可以调试阻止它退出的原因?

更新:

我遵循了 Jan 的建议,这就是我尝试“调试”一个简单的 setTimeout 调用时得到的结果:

/tmp/node2/bin/node test.js 
[debug] UV_TIMER   0x1cdfd20 (fd:910168617, refs:0, flags:0x0)
[debug] UV_ASYNC   0xc096e8 (fd:0, refs:-1, flags:0x0)
[debug] UV_ASYNC   0xc09658 (fd:0, refs:0, flags:0x0)
[debug] UV_IDLE    0xc09778 (fd:0, refs:-2, flags:0x0)
[debug] UV_ASYNC   0xc041c0 (fd:0, refs:-1, flags:0x0)
[debug] UV_ASYNC   0xc03de0 (fd:0, refs:-1, flags:0x0)
[debug] UV_TIMER   0xc03d40 (fd:0, refs:-1, flags:0x0)
[debug] UV_IDLE    0xc03ca0 (fd:0, refs:-1, flags:0x0)
[debug] UV_CHECK   0xc03c00 (fd:0, refs:-1, flags:0x0)
[debug] UV_IDLE    0xc03a00 (fd:0, refs:-1, flags:0x0)
[debug] UV_CHECK   0xc03b60 (fd:0, refs:-1, flags:0x0)
[debug] UV_PREPARE 0xc03ac0 (fd:0, refs:-1, flags:0x0)

所以这对我来说不是很有用,但我想没有其他选择。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    不容易。你可以编译node.js的this patched version,用它启动你的应用程序(node appname.js)然后运行:

    pkill -USR2 node
    

    这将打印出此时事件循环上的所有活动句柄。


    注意这是一个四个月大的版本,所以有点过时了。它应该在某一时刻进入节点,但还没有计划。

    【讨论】:

    • 完成了这个,但唯一打印的是“用户定义的信号 2”,然后进程退出。
    • 无视,我应该在编译之前切换到另一个分支
    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 2011-12-03
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多