class Pakyow::ProcessManager

Public Class Methods

new() click to toggle source
# File lib/pakyow/process_manager.rb, line 9
def initialize
  @group, @processes, @stopped = Process::Group.new, [], false
end

Public Instance Methods

add(process) click to toggle source
# File lib/pakyow/process_manager.rb, line 13
def add(process)
  process = process.dup
  run_process(process)
  @processes << process
end
restart() click to toggle source
# File lib/pakyow/process_manager.rb, line 28
def restart
  @group.running.each do |pid, forked|
    if forked.instance_variable_get(:@options)[:restartable]
      Process.kill(:INT, pid)
    end
  end
end
stop(signal = :INT) click to toggle source
# File lib/pakyow/process_manager.rb, line 23
def stop(signal = :INT)
  @stopped = true
  @group.kill(signal)
end
wait() click to toggle source
# File lib/pakyow/process_manager.rb, line 19
def wait
  @group.wait
end

Private Instance Methods

run_process(process) click to toggle source
# File lib/pakyow/process_manager.rb, line 38
def run_process(process)
  process[:count].times do
    Fiber.new {
      until @stopped
        status = @group.fork(process) do
          Async do
            process[:block].call
          rescue => error
            Pakyow.logger.houston(error)
            exit 1
          end
        rescue Interrupt
        end

        break unless status.success?
      end
    }.resume
  end
end