如何知道阻止节点进程停止的原因?

时间:2012-03-26 10:26:21

标签: node.js

我有一个相当复杂的脚本,它打开套接字,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)

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

1 个答案:

答案 0 :(得分:1)

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

pkill -USR2 node

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


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