2

这个简单的守护进程(使用 ruby​​ daemons gem 编写)打印从 0 到 9 的数字,直到我使用stop命令行选项停止守护进程:

require 'rubygems'
require 'daemons'

options = {
  :multiple   => false,
  :ontop      => false,
  :backtrace  => true,
  :log_output => true,
  :monitor    => false
}

Daemons.run_proc('test.rb', options) do
  loop do
    10.times do |i|
      puts "#{i}\n"
      sleep(1)
    end
  end
end

我启动守护进程

ruby simple_daemon.rb start

并停止它

ruby simple_daemon.rb stop

是否可以轻柔地停止守护进程,让它在终止其进程之前结束其最后一个循环,以便我确定它最后一次打印所有 10 个数字?

4

1 回答 1

3

您需要捕获调用 stop 时发送的 TERM 信号并自行处理。您的代码可能是这样的:

Daemons.run_proc('test.rb', options) do
  stopped = false

  Signal.trap("TERM") do
    stopped = true
  end

  while not stopped
    10.times do |i|
      puts "#{i}\n"
      sleep(1)
    end
  end
end
于 2012-09-04T15:51:15.063 回答