是否可以忽略 Ruby 中的 SIGHUP?
Is it possible to ignore SIGHUP in Ruby?
我想创建一个 Ruby 脚本,它将像这样开始:
$ ruby script.rb &
然后,我将关闭控制台,它必须保持活动状态,在后台工作。目前我必须像这样 运行 来实现:
$ nohup ruby script.rb &
我想摆脱 nohup
并直接在脚本中处理 SIGHUP -- 直接忽略它。可能吗?
当然,只是 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
上关闭。
我想创建一个 Ruby 脚本,它将像这样开始:
$ ruby script.rb &
然后,我将关闭控制台,它必须保持活动状态,在后台工作。目前我必须像这样 运行 来实现:
$ nohup ruby script.rb &
我想摆脱 nohup
并直接在脚本中处理 SIGHUP -- 直接忽略它。可能吗?
当然,只是 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
上关闭。