Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以忽略Ruby中的SIGHUP吗?_Ruby_Nohup - Fatal编程技术网

可以忽略Ruby中的SIGHUP吗?

可以忽略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脚本,它的开头如下:

$ 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,在脚本中把它做好吗?我们可以,这样以后的修改会更可靠。如果您对这个简单的功能还满意,那么就去掉这个功能。