在生成处理程序对象并通过DRb.thread.join等待之前,我有一个启动DRb服务的脚本。我希望脚本能够运行到被明确杀死为止,因此我添加了

trap "INT" do
  DRb.stop_service
end

它成功停止了DRb服务并在Ruby 1.8下退出,但在1.9以下似乎死锁了(在OS X 10.6.7上)。对进程进行采样显示了几个线程以semaphore_wait_signal_trap旋转。

我以为我在调用stop_service的方式上做错了什么,但我不确定是什么。谁能给我有关如何正确解决问题的任何指示?

最佳答案

好吧,我想我已经找到了解决方案。如果我将原始代码替换为

begin
  DRb.thread.join
rescue Interrupt
ensure
  DRb.stop_service
end

Ctrl-C起作用并停止该服务。

关于ruby - 停止分布式Ruby服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5460799/

10-15 09:11