Sha256: b6ff2e52466e832ef2cfc07ccefab199a27dc7325fd75ee0ad5c15010568c1cd

Contents?: true

Size: 1.1 KB

Versions: 12

Compression:

Stored size: 1.1 KB

Contents

module ChildProcess
  module Windows
    class << self
      def kill(signal, *pids)
        case signal
        when 'SIGINT', 'INT', :SIGINT, :INT
          signal = WIN_SIGINT
        when 'SIGBRK', 'BRK', :SIGBREAK, :BRK
          signal = WIN_SIGBREAK
        when 'SIGKILL', 'KILL', :SIGKILL, :KILL
          signal = WIN_SIGKILL
        when 0..9
          # Do nothing
        else
          raise Error, "invalid signal #{signal.inspect}"
        end

        pids.map { |pid| pid if send_signal(signal, pid) }.compact
      end

      def waitpid(pid, flags = 0)
        wait_for_pid(pid, no_hang?(flags))
      end

      def waitpid2(pid, flags = 0)
        code = wait_for_pid(pid, no_hang?(flags))

        [pid, code] if code
      end

      private

      def no_hang?(flags)
        (flags & Process::WNOHANG) == Process::WNOHANG
      end

      def wait_for_pid(pid, no_hang)
        code = Handle.open(pid) { |handle|
          handle.wait unless no_hang
          handle.exit_code
        }

        code if code != PROCESS_STILL_ACTIVE
      end

    end # class << self
  end # Windows
end # ChildProcess

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
childprocess-0.1.3 lib/childprocess/windows/api.rb
childprocess-0.1.2 lib/childprocess/windows/api.rb
childprocess-0.1.1 lib/childprocess/windows/api.rb
childprocess-0.1.0 lib/childprocess/windows/api.rb
childprocess-0.0.9 lib/childprocess/windows/api.rb
childprocess-0.0.7 lib/childprocess/windows/api.rb
childprocess-0.0.6 lib/childprocess/windows/api.rb
childprocess-0.0.5 lib/childprocess/windows/api.rb
childprocess-0.0.4 lib/childprocess/windows/api.rb
childprocess-0.0.3 lib/childprocess/windows/api.rb
childprocess-0.0.2 lib/childprocess/windows/api.rb
childprocess-0.0.1 lib/childprocess/windows/api.rb