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 43 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 124 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 134 def crashed? exited? && @exit_code != 0 end
Did the process exit?
@return [Boolean]
# File lib/childprocess/abstract_process.rb, line 114 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 63 def io raise SubclassResponsibility, "io" end
@return [Fixnum] the pid of the process after it has started
# File lib/childprocess/abstract_process.rb, line 71 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 143 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 81 def start launch_process @started = true self end
Forcibly terminate the process, using increasingly harsher methods if possible.
@param [Fixnum] timeout (3) Seconds to wait before trying the next method.
# File lib/childprocess/abstract_process.rb, line 94 def stop(timeout = 3) raise SubclassResponsibility, "stop" end
Block until the process has been terminated.
@return [Fixnum] The exit status of the process
# File lib/childprocess/abstract_process.rb, line 104 def wait raise SubclassResponsibility, "wait" end
Private Instance Methods
# File lib/childprocess/abstract_process.rb, line 182 def assert_started raise Error, "process not started" unless started? end
# File lib/childprocess/abstract_process.rb, line 166 def detach? @detach end
# File lib/childprocess/abstract_process.rb, line 170 def duplex? @duplex end
# File lib/childprocess/abstract_process.rb, line 158 def launch_process raise SubclassResponsibility, "launch_process" end
# File lib/childprocess/abstract_process.rb, line 174 def leader? @leader end
# File lib/childprocess/abstract_process.rb, line 178 def log(*args) $stderr.puts "#{self.inspect} : #{args.inspect}" if $DEBUG end
# File lib/childprocess/abstract_process.rb, line 162 def started? @started end