From: Joel VanderWerf Date: 2005-09-04T10:33:37+09:00 Subject: Re: Detecting a hung/stalled child process junk5@microserf.org.uk wrote: > Hi all > > I need to be able to start an external process (as one might do by > using backquotes, e.g. `ls some-dir`) but then kill that process some > time later if it has not completed. I cannot assume that the program I > call will ever complete (i.e. it potentially has an infinite loop), so > I want to be able to let the program run for 4000 microseconds (or > whatever) and if it hasn't completed, kill it. > > I'd be very grateful if anyone could advise me on how to do this. It > would be desirable if the solution was as platform-neutral as possible. > > Many thanks in advance. > > Chris > Someone just put a fork-based library for this on RAA: http://raa.ruby-lang.org/project/forkedtimeout/ but fork doesn't port well. The following might work, and I'm pretty sure it works on both windows and linux/unix: require 'timeout' Thread.new do begin Timeout.timeout(1) do `sleep 2` # or system "sleep 2" puts "done" end rescue TimeoutError puts "timed out" end end 10.times do puts "waiting" sleep 0.5 end __END__ output: waiting waiting waiting timed out waiting waiting waiting waiting waiting waiting waiting -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407