停止分布式Ruby服务

| 在生成处理程序对象并通过“ 0”等待之前,我有一个启动DRb服务的脚本。我希望脚本运行直到被明确杀死为止,因此我添加了
trap \"INT\" do
  DRb.stop_service
end
它成功停止了DRb服务并在Ruby 1.8下退出,但在1.9以下似乎死锁了(在OS X 10.6.7上)。对进程进行采样显示出几个线程以
semaphore_wait_signal_trap
旋转。 我以为我叫calling3ѭ的方式做错了,但我不确定。谁能给我有关如何正确解决问题的任何指示?     
已邀请:
        好吧,我想我已经找到了解决方案。如果我将原始代码替换为
begin
  DRb.thread.join
rescue Interrupt
ensure
  DRb.stop_service
end
Ctrl-C起作用并停止该服务。     
        “ 0”使调用线程等待DRb执行线程结束。 如果要捕获
INT
信号,我宁愿使用以下代码。
$execute = true
DRb.start_service

Signal.trap(\"INT\") { $execute = false }
while $execute
  sleep 1
end
DRb.stop_service
请注意,在这种情况下没有``0''。 捕获信号也是首选方法,而不是挽救Interrupt异常。     

要回复问题请先登录注册