可以忽略Ruby中的SIGHUP吗?
我想创建一个Ruby脚本,它的开头如下:可以忽略Ruby中的SIGHUP吗?,ruby,nohup,Ruby,Nohup,我想创建一个Ruby脚本,它的开头如下: $ ruby script.rb & 然后,我将关闭控制台,它必须保持活动状态,在后台工作。目前,为了实现这一目标,我必须这样运行: $ nohup ruby script.rb & 我想摆脱nohup,直接在脚本中处理它——只需忽略它。有可能吗?当然,只要HUP信号: def do_fork $pid = fork do Signal.trap("HUP") do puts "Received HUP, ig
$ ruby script.rb &
然后,我将关闭控制台,它必须保持活动状态,在后台工作。目前,为了实现这一目标,我必须这样运行:
$ nohup ruby script.rb &
我想摆脱nohup,直接在脚本中处理它——只需忽略它。有可能吗?当然,只要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
,它立即退出。您确定脚本是正确的,并且不需要类似于过程的东西。在结尾处等待?我确定。检查您的流程列表,它应该仍然存在。您是对的!将其全部封装在函数中有什么意义?难道我们不能摆脱do_fork,在脚本中把它做好吗?我们可以,这样以后的修改会更可靠。如果您对这个简单的功能还满意,那么就去掉这个功能。