From: "ara.t.howard" Date: 2008-04-17T00:22:42+09:00 Subject: Re: at_exit handlers and Process.kill On Apr 16, 2008, at 8:51 AM, Tim Pease wrote: >>> cleanup = lambda { >>> next if $cleanup_was_already_done >>> $cleanup_was_already_done = true >>> # your cleanup code goes here >>> } >>> >>> Signal.list.values.each do |signal| >>> Signal.trap(signal,&cleanup) >>> end >> >> cleanup = lambda do >> cleanup = lambda{} >> p 'cleanup' >> end >> > > That's not going to work. The various exit handlers already have a > reference to the cleanup proc, so reassigning the cleanup variable > will not prevent it from getting called twice. I know that global > variables are ugly, but there is a time and a place for everything. > > And it's way too clever for me ;) the whole code: cfp:~ > cat a.rb cleanup = lambda do cleanup = lambda{} p :cleanup end Signal.trap('HUP'){ cleanup.call } Signal.trap('USR1'){ cleanup.call } Process.kill 'HUP', Process.pid Process.kill 'USR1', Process.pid cfp:~ > ruby a.rb :cleanup just avoids needing an external/global switch... a @ http://codeforpeople.com/ -- we can deny everything, except that we have the possibility of being better. simply reflect on that. h.h. the 14th dalai lama