diff --git a/lib/secure/runner.rb b/lib/secure/runner.rb index b4ed868..fdd245f 100644 --- a/lib/secure/runner.rb +++ b/lib/secure/runner.rb @@ -3,6 +3,7 @@ class Runner def initialize(opts = {}, *args) @opts = opts @args = args + @timeout = opts[:timeout] end def run @@ -15,9 +16,14 @@ def run exit end end - - Process.wait(child) + Timeout.timeout @timeout do + Process.wait(child) + end ParentProcess.new(read_file, write_file).execute + rescue Timeout::Error + Process.kill(9, child) + Process.wait(child) + raise ensure read_file.close unless read_file.closed? write_file.close unless write_file.closed?