class Employer::Employees::ForkingEmployee

Public Instance Methods

force_work_stop() click to toggle source
# File lib/employer/employees/forking_employee.rb, line 45
def force_work_stop
  return if free?
  Process.kill("KILL", @job_pid)
  work_state(true)
end
free() click to toggle source
# File lib/employer/employees/forking_employee.rb, line 22
def free
  super
  @job_pid = nil
end
work(job) click to toggle source
# File lib/employer/employees/forking_employee.rb, line 6
def work(job)
  super

  @job_pid = fork do
    state = nil

    begin
      perform_job
      state = 0
    ensure
      state = 1 if state.nil?
      exit(state)
    end
  end
end
work_state(wait = false) click to toggle source
# File lib/employer/employees/forking_employee.rb, line 27
def work_state(wait = false)
  return @work_state if [:complete, :failed].include?(@work_state)

  @work_state = :busy

  flags = wait == false ? Process::WNOHANG : 0
  pid, status = Process.waitpid2(@job_pid, flags)
  if pid
    if status.exitstatus == 0
      @work_state = :complete
    else
      @work_state = :failed
    end
  end

  @work_state
end