Можно ли игнорировать SIGHUP в Ruby? - PullRequest
0 голосов
/ 07 июня 2018

Я хочу создать скрипт Ruby, который будет запускаться так:

$ ruby script.rb &

Затем я закрою консоль, и она должна остаться в живых, работая в фоновом режиме.На данный момент мне нужно запустить его так, чтобы добиться:

$ nohup ruby script.rb &

Я хочу избавиться от nohup и разобраться с SIGHUP прямо внутри скрипта -- просто игнорируй это.Возможно ли это?

1 Ответ

0 голосов
/ 07 июня 2018

Конечно, просто 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.

...