class ChildProcess::AbstractProcess
Constants
- POLL_INTERVAL
Attributes
Set the child's current working directory.
Set this to true if you do not care about when or if the process quits.
Set this to true if you want to write to the process' stdin (process.io.stdin)
Modify the child's environment variables
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
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
Is this process running?
@return [Boolean]
# File lib/childprocess/abstract_process.rb, line 133 def alive? started? && !exited? end
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
Did the process exit?
@return [Boolean]
# File lib/childprocess/abstract_process.rb, line 113 def exited? raise SubclassResponsibility, "exited?" end
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
@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
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
Launch the child process
@return [AbstractProcess] self
# File lib/childprocess/abstract_process.rb, line 80 def start launch_process @started = true self end
Has the process started?
@return [Boolean]
# File lib/childprocess/abstract_process.rb, line 123 def started? @started end
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
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
# File lib/childprocess/abstract_process.rb, line 187 def assert_started raise Error, "process not started" unless started? end
# File lib/childprocess/abstract_process.rb, line 171 def detach? @detach end
# File lib/childprocess/abstract_process.rb, line 175 def duplex? @duplex end
# File lib/childprocess/abstract_process.rb, line 167 def launch_process raise SubclassResponsibility, "launch_process" end
# File lib/childprocess/abstract_process.rb, line 179 def leader? @leader end
# File lib/childprocess/abstract_process.rb, line 183 def log(*args) ChildProcess.logger.debug "#{self.inspect} : #{args.inspect}" end