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