如何知道什么使节点进程停止?

我hace一个非常复杂的脚本,它打开套接字,HTTP服务器,读/写文件,设置超时等。达到一些条件,所有这些应该停止 – 我清除所有的超时,closures所有的服务器等。

但是有时候这个过程会停下来,有时它会一直等待发生。 我可以杀死节点进程,但是我想找出造成这个行为的原因,修复它并让进程自行停止。 是否有可能debugging什么让它退出?

更新:

我跟随了Jan的build议,这是我在尝试“debugging”一个简单的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) 

所以这对我来说并不是很有用,但我想没有别的select。

不容易。 你可以编译这个补丁版本的node.js,用它启动你的应用程序( node appname.js ),然后运行:

 pkill -USR2 node 

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


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