From: Joel VanderWerf Date: 2008-04-16T02:22:23+09:00 Subject: Re: at_exit handlers and Process.kill 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. Note that you can use BEGIN to register handlers out of order: exit BEGIN { at_exit { puts "at_exit" } END { puts "END" } } (without the BEGIN, nothing is printed) -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407