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