Class: SafeTimeout::InterruptingChildProcess

Inherits:
Object
  • Object
show all
Defined in:
lib/safe_timeout/interrupting_child_process.rb

Instance Method Summary collapse

Constructor Details

#initialize(expiration) ⇒ InterruptingChildProcess

Returns a new instance of InterruptingChildProcess.



4
5
6
7
8
9
10
# 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

Instance Method Details

#notify_parent_of_expirationObject



12
13
14
# File 'lib/safe_timeout/interrupting_child_process.rb', line 12

def notify_parent_of_expiration
  SafeTimeout.send_signal('TRAP', @ppid)
end

#wait_for_timeoutObject



16
17
18
19
20
21
22
# 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