On Tue, 15 Apr 2008 12:29:01 -0500, Daniel Berger wrote: > Ken Bloom wrote: >> On Tue, 15 Apr 2008 11:28:33 -0500, Daniel Berger wrote: >> >>> ts wrote: >>>> Daniel Berger wrote: >>>>> # process_test.rb >>>>> File.open("pid.txt", "w"){ |fh| fh.print Process.pid } p Process.pid >>>>> >>>>> sleep 1 while true >>>> you really think that the following line will be executed ? >>> Why not? The docs say at_exit, "Converts block to a Proc object (and >>> therefore binds it at the point of call), and registers it for >>> execution when the program exits." >> >> Ruby does *everything* in the order it encounters it in the file. >> at_exit installs an exit handler, (a proc to be run later) but it's a >> method that has to be executed. If you put "sleep 1 while true" before >> the at_exit call, the at_exit call will never be executed, so the exit >> handler will never be installed. Adjust your program to call at_exit >> (or whatever other handlers you want) before running anything else. >> >> # process_test.rb >> at_exit { >> puts "AT_EXIT" >> } >> >> END{ >> puts "END" >> } >> >> trap("KILL"){ >> puts "KILLED" >> } >> >> >> File.open("pid.txt", "w"){ |fh| fh.print Process.pid } p Process.pid >> >> sleep 1 while true > > Right, I should have clarified that, even with the right ordering, > at_exit and END blocks weren't called. > > Perhaps it's the signal I used? I haven't fully experimented yet... > > Regards, > > Dan See signal(7) for descriptions and numbers of the various signals. Most likely you want to use SIGINT (signal 1), and then at_exit will be sufficient. Note that SIGKILL (signal 9) cannot be caught under any circumstances (it's used to kill badly misbehaving applications), so your sigkill handler is useless. I think it's unnecessary to install lots of signal handlers to do the cleanup. Just learn what each signal does, and what to expect, and at_exit should already be designed to do what you want. --Ken -- Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/