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