class ChildProcess::AbstractProcess

Constants

POLL_INTERVAL

Attributes

cwd[RW]

Set the child's current working directory.

detach[RW]

Set this to true if you do not care about when or if the process quits.

duplex[RW]

Set this to true if you want to write to the process' stdin (process.io.stdin)

environment[R]

Modify the child's environment variables

exit_code[R]
leader[RW]

Set this to true to make the child process the leader of a new process group

This can be used to make sure that all grandchildren are killed when the child process dies.

Public Class Methods

new(args) click to toggle source

Create a new process with the given args.

@api private @see ChildProcess.build

# File lib/childprocess/abstract_process.rb, line 42
def initialize(args)
  unless args.all? { |e| e.kind_of?(String) }
    raise ArgumentError, "all arguments must be String: #{args.inspect}"
  end

  @args        = args
  @started     = false
  @exit_code   = nil
  @io          = nil
  @cwd         = nil
  @detach      = false
  @duplex      = false
  @leader      = false
  @environment = {}
end

Public Instance Methods

alive?() click to toggle source

Is this process running?

@return [Boolean]

# File lib/childprocess/abstract_process.rb, line 133
def alive?
  started? && !exited?
end
crashed?() click to toggle source

Returns true if the process has exited and the exit code was not 0.

@return [Boolean]

# File lib/childprocess/abstract_process.rb, line 143
def crashed?
  exited? && @exit_code != 0
end
exited?() click to toggle source

Did the process exit?

@return [Boolean]

# File lib/childprocess/abstract_process.rb, line 113
def exited?
  raise SubclassResponsibility, "exited?"
end
io() click to toggle source

Returns a ChildProcess::AbstractIO subclass to configure the child's IO streams.

# File lib/childprocess/abstract_process.rb, line 62
def io
  raise SubclassResponsibility, "io"
end
pid() click to toggle source

@return [Integer] the pid of the process after it has started

# File lib/childprocess/abstract_process.rb, line 70
def pid
  raise SubclassResponsibility, "pid"
end
poll_for_exit(timeout) click to toggle source

Wait for the process to exit, raising a ChildProcess::TimeoutError if the timeout expires.

# File lib/childprocess/abstract_process.rb, line 152
def poll_for_exit(timeout)
  log "polling #{timeout} seconds for exit"

  end_time = Time.now + timeout
  until (ok = exited?) || Time.now > end_time
    sleep POLL_INTERVAL
  end

  unless ok
    raise TimeoutError, "process still alive after #{timeout} seconds"
  end
end
start() click to toggle source

Launch the child process

@return [AbstractProcess] self

# File lib/childprocess/abstract_process.rb, line 80
def start
  launch_process
  @started = true

  self
end
started?() click to toggle source

Has the process started?

@return [Boolean]

# File lib/childprocess/abstract_process.rb, line 123
def started?
  @started
end
stop(timeout = 3) click to toggle source

Forcibly terminate the process, using increasingly harsher methods if possible.

@param [Integer] timeout (3) Seconds to wait before trying the next method.

# File lib/childprocess/abstract_process.rb, line 93
def stop(timeout = 3)
  raise SubclassResponsibility, "stop"
end
wait() click to toggle source

Block until the process has been terminated.

@return [Integer] The exit status of the process

# File lib/childprocess/abstract_process.rb, line 103
def wait
  raise SubclassResponsibility, "wait"
end

Private Instance Methods

assert_started() click to toggle source
# File lib/childprocess/abstract_process.rb, line 187
def assert_started
  raise Error, "process not started" unless started?
end
detach?() click to toggle source
# File lib/childprocess/abstract_process.rb, line 171
def detach?
  @detach
end
duplex?() click to toggle source
# File lib/childprocess/abstract_process.rb, line 175
def duplex?
  @duplex
end
launch_process() click to toggle source
# File lib/childprocess/abstract_process.rb, line 167
def launch_process
  raise SubclassResponsibility, "launch_process"
end
leader?() click to toggle source
# File lib/childprocess/abstract_process.rb, line 179
def leader?
  @leader
end
log(*args) click to toggle source
# File lib/childprocess/abstract_process.rb, line 183
def log(*args)
  ChildProcess.logger.debug "#{self.inspect} : #{args.inspect}"
end