Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Detecting a hung/stalled child process

4 views
Skip to first unread message

ju...@microserf.org.uk

unread,
Sep 3, 2005, 7:52:29 PM9/3/05
to
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

Joel VanderWerf

unread,
Sep 3, 2005, 9:33:37 PM9/3/05
to

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


ju...@microserf.org.uk

unread,
Sep 4, 2005, 11:11:06 AM9/4/05
to
Thanks for your help!

0 new messages