class Kamisama::Task
Public Class Methods
new(task_index, block)
click to toggle source
# File lib/kamisama/task.rb, line 3 def initialize(task_index, block) @task_index = task_index @block = block end
Public Instance Methods
alive?()
click to toggle source
# File lib/kamisama/task.rb, line 39 def alive? Process.getpgid(@pid) true rescue Errno::ESRCH false end
log(message)
click to toggle source
# File lib/kamisama/task.rb, line 46 def log(message) puts "[WORKER #{@task_index}] #{message}" end
restart!()
click to toggle source
# File lib/kamisama/task.rb, line 29 def restart! puts "[Kamisama Master] Restarting Worker." @pid = nil start end
start()
click to toggle source
# File lib/kamisama/task.rb, line 8 def start @pid = Process.fork do begin # receive sigterm when parent dies Kamisama::ProcessCtrl.set_parent_death_signal(:sigterm) log("Worker started. Hello!") @block.call(@task_index) rescue Exception => e # handle all exceptions, even system ones log("Shutting down... #{e.message}") exit ensure exit end end Process.detach(@pid) end
terminate!()
click to toggle source
# File lib/kamisama/task.rb, line 35 def terminate! Process.kill("TERM", @pid) end