小编phy*_*lae的帖子

如何在Ruby中使用信号阻塞

如何阻止Ruby中的某些信号?(即sigprocmask,如下所述:http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_21.html#SEC371)

这是我的示例代码

pid = fork do
  trap('INT') do
    puts "Graceful shutdown..."
    puts "goodbye"
    exit 0
  end

  loop do
    this_could_be_interrupted
    something_that_must_not_be_interrupted
    this_could_be_interrupted_too
  end
end

sleep 5
Process.kill('INT', pid)
Run Code Online (Sandbox Code Playgroud)

我可以something_that_must_not_be_interrupted在ruby块或其他东西中包装以确保在该方法运行时不会处理SIGINT吗?

我想理想的是,如果我可以做这样的事情:

Process.block_signal('INT') do
  something_that_must_not_be_interrupted
end
Run Code Online (Sandbox Code Playgroud)

更新:我目前正在做这样的事情:

trap('INT') do
  @interrupted = true
end

loop do
  exit 0 if @interrupted
  something_that_must_not_be_interrupted
end
Run Code Online (Sandbox Code Playgroud)

ruby signals

13
推荐指数
2
解决办法
8292
查看次数

标签 统计

ruby ×1

signals ×1