Как в 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)
Могу ли я обернуть something_that_must_not_be_interrupted
в рубиновый блок или что-то еще, чтобы гарантировать, что SIGINT не будет обрабатываться, пока этот метод работает?
Думаю, идеальным было бы, если бы я мог сделать что-то вроде этого :
Process.block_signal('INT') do
something_that_must_not_be_interrupted
end
ОБНОВЛЕНИЕ : Сейчас я делаю что-то вроде этого:
trap('INT') do
@interrupted = true
end
loop do
exit 0 if @interrupted
something_that_must_not_be_interrupted
end