class Archfiend::SubprocessLoop

Constants

EXCEPTION_DELAY

Attributes

subclasses[R]
subprocess_pids[R]
app[RW]

Public Class Methods

inherited(child_class) click to toggle source
# File lib/archfiend/subprocess_loop.rb, line 15
def inherited(child_class)
  @subclasses ||= []
  @subclasses.push(child_class)
  @subprocess_pids ||= [] # rubocop:disable Naming/MemoizedInstanceVariableName
end
kill_all() click to toggle source
# File lib/archfiend/subprocess_loop.rb, line 34
def kill_all
  return if !@subprocess_pids || @subprocess_pids.empty?

  @subprocess_pids.each do |spid|
    begin
      Process.kill('TERM', spid)
    rescue Errno::ESRCH, Errno::EPERM # rubocop:disable Lint/HandleExceptions
      # The list might contain some stale pids, if any of subprocesses terminated early
    end
  end
end
start_all(app) click to toggle source
# File lib/archfiend/subprocess_loop.rb, line 21
def start_all(app)
  (subclasses || []).each do |subclass|
    process_id = fork do
      instance = subclass.new
      instance.app = app
      app.logger.info "Starting subprocess #{subclass}"
      instance.run
    end
    @subprocess_pids << process_id
    Process.detach(process_id)
  end
end