maintain_workers()
click to toggle source
# File lib/chef/expander/cluster_supervisor.rb, line 102 def maintain_workers while @running sleep 1 workers_to_replace = {} @workers.each do |process_id, worker_params| if result = Process.waitpid2(process_id, Process::WNOHANG) log.error { "worker #{worker_params[:index]} (PID: #{process_id}) died with status #{result[1].exitstatus || '(no status)'}"} workers_to_replace[process_id] = worker_params end end workers_to_replace.each do |dead_pid, worker_params| @workers.delete(dead_pid) start_worker(worker_params[:index]) end end @workers.each do |pid, worker_params| log.info { "Stopping worker #{worker_params[:index]} (PID: #{pid})"} Process.kill(@kill, pid) end @workers.each do |pid, worker_params| Process.waitpid2(pid) end end