This is even nicer:
http://www.jpaisley.com/software/ruby/open4.rb

Good job Jonathan!



Jordi Planes wrote:
> Jordi Planes wrote:
>> 
>> Hi,
>> 
>> I would like to stop a system call after a timeout, but doing so with
>> the Timeout library does not kill the process, and the process keeps
>> running. I think the problem is the system call does a Process.fork and
>> no way to kill it, no matter if the Thread is stoped.
>> 
>> Is there any way to kill the process? May be getting its pid?
>> 
>> Thanks,
>> 
>> Jordi
> 
> 
> 
> I finally come up with my own timeout, using Process instead of Thread.
> In case somebody is interested, here it is:
> 
> module Timeout
> 
>   class Error<Interrupt
>   end
> 
>   def timeout( sec, exception=Error )
>     return yield if sec == nil or sec.zero?
>     pid_execution = Process.fork { begin yield ensure exit! end }
>     pid_sleep = Process.fork { begin sleep sec ensure exit! end }
>     if Process.wait == pid_sleep then
>       Process.kill( 'INT', pid_execution )
>       raise exception, "execution expired"
>     else
>       Process.kill( 'ALRM', pid_sleep )
>     end
>   end
> 
>   module_function :system_call, :timeout
> 
> end


-- 
Posted via http://www.ruby-forum.com/.