From 9e63185f223adf88545f39129a7bfe29841ab191 Mon Sep 17 00:00:00 2001 From: Alexander Ulitin Date: Sat, 16 Feb 2013 03:36:01 +0400 Subject: [PATCH 1/2] Added timeout for process --- lib/secure/runner.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/secure/runner.rb b/lib/secure/runner.rb index b4ed868..30618f5 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,13 @@ 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) + raise ensure read_file.close unless read_file.closed? write_file.close unless write_file.closed? From c8b7e252ee6b21c9d50b2da29c697fe584f3e030 Mon Sep 17 00:00:00 2001 From: Alexander Ulitin Date: Sat, 16 Feb 2013 03:59:56 +0400 Subject: [PATCH 2/2] fix killed zombie process --- lib/secure/runner.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/secure/runner.rb b/lib/secure/runner.rb index 30618f5..fdd245f 100644 --- a/lib/secure/runner.rb +++ b/lib/secure/runner.rb @@ -22,6 +22,7 @@ def run 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?