Sha256: ec9eeca1240ce483d22bfb52d7927b99d9b1b081e1690fbf3053a34c4b875ad1

Contents?: true

Size: 1.12 KB

Versions: 3

Compression:

Stored size: 1.12 KB

Contents

module RestAssured
  module Utils
    class Subprocess
      attr_reader :pid

      def initialize
        @pid = Kernel.fork do
          trap('USR1') do
            $stopped = true
            Process.kill('TERM', Process.pid) # unlike 'exit' this one is NOT being intercepted by Webrick
          end

          at_exit do
            if $stopped
              puts "Being stopped from parent..."
            #else
              #puts "Shutting down parent..."
              #Process.kill('TERM', Process.ppid)
            end
            exit!
          end

          begin
            yield
          rescue => e
            if defined?(EventMachine) && e.is_a?(EventMachine::ConnectionNotBound)
              retry
            end
            puts "#{self} has raised #{e.inspect}:"
            puts e.backtrace.join("\n")
          end
        end

        Process.detach(@pid)
        at_exit { stop }
      end

      def alive?
        Process.kill(0, @pid)
        true
      rescue Errno::ESRCH
        false
      end

      def stop
        Process.kill('USR1', @pid) rescue Errno::ESRCH # no such process
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rest-assured-1.0.0 lib/rest-assured/utils/subprocess.rb
rest-assured-1.0.0.rc2 lib/rest-assured/utils/subprocess.rb
rest-assured-1.0.0.rc1 lib/rest-assured/utils/subprocess.rb