是否可以忽略Ruby中的SIGHUP?

时间:2018-06-07 13:50:58

标签: ruby nohup

我想创建一个Ruby脚本,它将像这样开始:

$ ruby script.rb &

然后,我将关闭控制台,它必须保持活着,在后台工作。目前我必须像这样运行它,以便实现:

$ nohup ruby script.rb &

我想摆脱nohup并直接在脚本中处理SIGHUP - 只需忽略它。有可能吗?

1 个答案:

答案 0 :(得分:1)

当然,只有Signal.trap HUP信号:

def do_fork
  $pid = fork do
    Signal.trap("HUP") do
      puts "Received HUP, ignoring..."
    end
    Signal.trap("TERM") do
      puts "Received TERM, terminating..."
      exit(0)
    end
    while true do sleep(10_000) end
  end

  Process.detach($pid)
end

do_fork

将上面的代码复制到某个文件并使用ruby file.rb运行,看它忽略kill -HUP pid并关闭kill -TERM pid