class SafeTimeout::InterruptingChildProcess

Public Class Methods

new(expiration) click to toggle source
# File lib/safe_timeout/interrupting_child_process.rb, line 4
def initialize(expiration)
  @ppid = Process.ppid
  @expiration = expiration.to_f

  abort "Invalid pid to monitor: #{@ppid}" if @ppid.to_i.zero?
  abort "Invalid expiration: #{@expiration}" unless @expiration > 0.0
end

Public Instance Methods

notify_parent_of_expiration() click to toggle source
# File lib/safe_timeout/interrupting_child_process.rb, line 12
def notify_parent_of_expiration
  SafeTimeout.send_signal('TRAP', @ppid)
end
wait_for_timeout() click to toggle source
# File lib/safe_timeout/interrupting_child_process.rb, line 16
def wait_for_timeout
  Signal.trap('HUP') { exit 0 }

  sleep [@expiration - Time.now.to_f, 0.1].max

  notify_parent_of_expiration
end