0
有沒有一種方法可以讓Ruby進程/線程自行暫停,直到它由某個外部進程的信號(或其他進程間通信機制)恢復?我試過以下,但線程似乎並沒有被喚醒:Ruby等待來自外部進程的信號
this_thread = Thread.current
Thread.new do
Signal.trap("INT") do
puts "\nWaking up!"
this_thread.run
end
sleep
end
puts "Going to sleep..."
Thread.stop
puts "Now awake! =)"
實例運行:
$ ruby wake_on_signal.rb Going to sleep... ^C Waking up! ^C Waking up! ^C Waking up!
我也試過以下,它的作品,但依賴於連續地檢查一些變量,我寧願以避免如果可能的值:
signal_received = false
Signal.trap("INT") do
puts "\nWaking up!"
signal_received = true
end
puts "Going to sleep..."
sleep 0.5 until signal_received
puts "Now awake! =)"
實施例運行:
$ ruby sleep_until_signal.rb Going to sleep... ^C Waking up! Now awake! =)
哈哈。不錯的嘗試,但我真的需要該程序在醒來後實際上繼續運行。 :P接收信號後,我的真實程序還有很多事情要比打印「Now awake!=)」更好,然後退出。 – Ajedi32
那麼你可以把所有這些都放到你在'at_exit'塊中調用的方法中;-)但是我明白你的意思 - 能夠多次停止和恢復會很好。 –