From: "Ara.T.Howard" Date: 2004-02-10T10:15:02+09:00 Subject: Re: timeout w/o timeout.rb On Tue, 10 Feb 2004, Jamis Buck wrote: > Date: Tue, 10 Feb 2004 09:32:11 +0900 > From: Jamis Buck > Newsgroups: comp.lang.ruby > Subject: Re: timeout w/o timeout.rb > > Ara.T.Howard wrote: > > >i'm writing some unit tests which do alot of io/select/etc - bad things to mix > >with a thread based 'timeout' method... i've been using this instead: > > > > # a timeout method which does not fail when io blocks > > trap 'SIGALRM', 'IGNORE' > > class TimeoutError < StandardError; end > > def timeout n > > begin > > trap('SIGALRM'){throw :timeout, TimeoutError.new} > > cid = nil > > unless((cid = fork)) > > sleep n > > Process.kill 'SIGALRM', Process.ppid > > else > > thrown = > > catch(:timeout) do > > ret = yield > > Process.kill 'SIGKILL', cid > > ret > > end > > raise thrown if TimeoutError === thrown > > end > > ensure > > trap 'SIGALRM', 'IGNORE' > > end > > end > > > >any massive problems with this (this impl is a mega hack i realize)? > > > >does it seem like some permutation of this might be useful? something like > >Process#timeout perhaps?? > > > >-a > > > > > > Doesn't Ruby use SIGALRM internally? I could be wrong, but if it does, > you may be asking for trouble by using it in your script. > > - Jamis ah - good point - and SIGUSR1 would work just as well -a -- ATTN: please update your address books with address below! =============================================================================== | EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov | PHONE :: 303.497.6469 | ADDRESS :: E/GC2 325 Broadway, Boulder, CO 80305-3328 | STP :: http://www.ngdc.noaa.gov/stp/ | NGDC :: http://www.ngdc.noaa.gov/ | NESDIS :: http://www.nesdis.noaa.gov/ | NOAA :: http://www.noaa.gov/ | US DOC :: http://www.commerce.gov/ | | The difference between art and science is that science is what we | understand well enough to explain to a computer. | Art is everything else. | -- Donald Knuth, "Discover" | | /bin/sh -c 'for l in ruby perl;do $l -e "print \"\x3a\x2d\x29\x0a\"";done' ===============================================================================