停止分布式Ruby服务

kfb*_*kfb 6 ruby distributed drb ruby-1.9 ruby-1.8

我有一个启动DRb服务的脚本,然后生成一个处理程序对象并等待通过DRb.thread.join.我想脚本运行直到明确杀死,所以我补充说

trap "INT" do
  DRb.stop_service
end
Run Code Online (Sandbox Code Playgroud)

它成功地停止了DRb服务并在Ruby 1.8下退出,但在1.9下似乎死锁(在OS X 10.6.7上).采样过程显示出几条线程在旋转semaphore_wait_signal_trap.

我假设我在打电话的方式做错了stop_service,但我不确定是什么.任何人都可以给我任何指示如何正确地去做它?

kfb*_*kfb 6

好的,我想我找到了解决方案.如果我用原始代码替换

begin
  DRb.thread.join
rescue Interrupt
ensure
  DRb.stop_service
end
Run Code Online (Sandbox Code Playgroud)

Ctrl-C可以工作并停止服务.