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.
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