I have a program (currently written in python, but that could change that runs until it recieves a signal to exit. Before exiting, it
needs to close a Lucene index, so the logical thing to do would be put
that writer.close call in an ensure statement so that the index will
close before the program exits. It looks like ruby (python as well)
doesn't integrate external signals in the normal program flow at all.
Is it possible to have a signal trigger an exception so that an ensure
statement will be executed? My test code is:
#!/usr/bin/env ruby
begin
聽聽sleep(1000)
ensure
聽聽p "hi there!"
end
And I run the script and send it all sort of signals (quit, int, term,
hup, etc). Nothing makes the program print "hi there!" Can this be
done?
Wow, I'm not smart. I had print in my actual test code, which doesn't
do a newline. The message was lost in my ugly command prompt. So, it
looks like Ruby handles this very nicely (with a SignalException).
Sorry for the noise.
路路路
On 25/01/06, tsuraan <tsuraan@gmail.com> wrote:
I have a program (currently written in python, but that could change that runs until it recieves a signal to exit. Before exiting, it
needs to close a Lucene index, so the logical thing to do would be put
that writer.close call in an ensure statement so that the index will
close before the program exits. It looks like ruby (python as well)
doesn't integrate external signals in the normal program flow at all.
Is it possible to have a signal trigger an exception so that an ensure
statement will be executed? My test code is:
#!/usr/bin/env ruby
begin
sleep(1000)
ensure
p "hi there!"
end
And I run the script and send it all sort of signals (quit, int, term,
hup, etc). Nothing makes the program print "hi there!" Can this be
done?
(I made it p "\nhi there!" to make the example clearer). If you wanted
to broaden your horizons a bit you could try trapping some signals and
raising exceptions yourself:
trap('TERM') {
raise "Terminated!"
}
begin
sleep 1000
rescue Exception => ex
puts "\nGot #{ex}"
ensure
puts "hi there!"
end
Wow, I'm not smart. I had print in my actual test code, which doesn't
do a newline. The message was lost in my ugly command prompt. So, it
looks like Ruby handles this very nicely (with a SignalException).
Sorry for the noise.