class ChildProcess::Windows::Process

Attributes

pid[R]

Public Instance Methods

exited?() click to toggle source
# File lib/childprocess/windows/process.rb, line 37
def exited?
  return true if @exit_code
  assert_started

  code   = @handle.exit_code
  exited = code != PROCESS_STILL_ACTIVE

  log(:exited? => exited, :code => code)

  if exited
    @exit_code = code
    close_handle
    close_job_if_necessary
  end

  exited
end
io() click to toggle source
# File lib/childprocess/windows/process.rb, line 7
def io
  @io ||= Windows::IO.new
end
stop(timeout = 3) click to toggle source
# File lib/childprocess/windows/process.rb, line 11
def stop(timeout = 3)
  assert_started

  log "sending KILL"
  @handle.send(WIN_SIGKILL)

  poll_for_exit(timeout)
ensure
  close_handle
  close_job_if_necessary
end
wait() click to toggle source
# File lib/childprocess/windows/process.rb, line 23
def wait
  if exited?
    exit_code
  else
    @handle.wait
    @exit_code = @handle.exit_code

    close_handle
    close_job_if_necessary

    @exit_code
  end
end

Private Instance Methods

close_handle() click to toggle source
# File lib/childprocess/windows/process.rb, line 86
def close_handle
  @handle.close
end
close_job_if_necessary() click to toggle source
# File lib/childprocess/windows/process.rb, line 90
def close_job_if_necessary
  @job.close if leader?
end
launch_process() click to toggle source
# File lib/childprocess/windows/process.rb, line 57
def launch_process
  builder = ProcessBuilder.new(@args)
  builder.leader      = leader?
  builder.detach      = detach?
  builder.duplex      = duplex?
  builder.environment = @environment unless @environment.empty?
  builder.cwd         = @cwd

  if @io
    builder.stdout      = @io.stdout
    builder.stderr      = @io.stderr
  end

  @pid = builder.start
  @handle = Handle.open @pid

  if leader?
    @job = Job.new(detach?, true)
    @job << @handle
  end

  if duplex?
    raise Error, "no stdin stream" unless builder.stdin
    io._stdin = builder.stdin
  end

  self
end