如何阻止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)