From: Ken Bloom Date: 2008-04-16T02:10:31+09:00 Subject: Re: at_exit handlers and Process.kill 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 --Ken -- Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/