class Nonnative::Process

Attributes

pid[R]
timeout[R]

Public Class Methods

new(service) click to toggle source
Calls superclass method
# File lib/nonnative/process.rb, line 5
def initialize(service)
  super service

  @timeout = Nonnative::Timeout.new(service.timeout)
end

Public Instance Methods

start() click to toggle source
# File lib/nonnative/process.rb, line 11
def start
  unless process_exists?
    proxy.start
    @pid = process_spawn
    wait_start
  end

  pid
end
stop() click to toggle source
# File lib/nonnative/process.rb, line 21
def stop
  if process_exists?
    process_kill
    proxy.stop
    wait_stop
  end

  pid
end

Protected Instance Methods

wait_stop() click to toggle source
# File lib/nonnative/process.rb, line 33
def wait_stop
  timeout.perform do
    ::Process.waitpid2(pid)
  end
end

Private Instance Methods

process_exists?() click to toggle source
# File lib/nonnative/process.rb, line 55
def process_exists?
  return false if pid.nil?

  signal = Signal.list['EXIT']
  ::Process.kill(signal, pid)
  true
rescue Errno::ESRCH
  false
end
process_kill() click to toggle source
# File lib/nonnative/process.rb, line 43
def process_kill
  signal = Signal.list[service.signal || 'INT'] || Signal.list['INT']
  ::Process.kill(signal, pid)
end
process_spawn() click to toggle source
# File lib/nonnative/process.rb, line 48
def process_spawn
  environment = service.environment || {}
  environment = environment.transform_keys(&:to_s).transform_values(&:to_s)

  spawn(environment, service.command, %i[out err] => [service.log, 'a'])
end