Sha256: 3a3f1bb511ad17f331f6bc7be5a90b4dd482da4d82e441fd9f443040d8a38fd2

Contents?: true

Size: 555 Bytes

Versions: 1

Compression:

Stored size: 555 Bytes

Contents

module SafeTimeout
  class InterruptingChildProcess

    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

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

    def wait_for_timeout
      Signal.trap('HUP') { exit 0 }

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

      notify_parent_of_expiration
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
safe_timeout-1.0.0 lib/safe_timeout/interrupting_child_process.rb